Это мой первый вопрос за долгое время, я очень благодарен за любую помощь!
У меня есть одна база данных, в которой хранятся автомобили, и одна база данных, в которой хранятся их изображения. Я использую ВНУТРЕННЕЕ СОЕДИНЕНИЕ, чтобы получить список транспортных средств и их изображения. После запроса к базе данных я помещаю результат в массив; поэтому 2 массива в 1 массиве:
return array($vehicles, $vehicle_images);
Когда я делаю print_r, я получаю правильный результат:
<?php print_r($your_listings[0]); ?>
<br />
<?php print_r($your_listings[1]); ?>
Возврат:
Array
(
[0] => Array
(
[vehicle_id] => 35
[vehicle_type] => jeep
[vehicle_vin] => 6969
[owner_email] => [email protected]
[vehicle_make] => Jeep
[vehicle_year] => 2008
[vehicle_model] => cherokee
)
[1] => Array
(
[vehicle_id] => 36
[vehicle_type] => motorcycle
[vehicle_vin] => 1234
[owner_email] => [email protected]
[vehicle_make] => honda
[vehicle_year] => 2018
[vehicle_model] => random
)
[2] => Array
(
[vehicle_id] => 39
[vehicle_type] => atv
[vehicle_vin] => 3215
[owner_email] => [email protected]
[vehicle_make] => Yamaha
[vehicle_year] => 1990
[vehicle_model] => OHYEA
)
)
Array
(
[0] => Array
(
[vehicle_id] => 35
[image_display] => placeholder
)
[1] => Array
(
[vehicle_id] => 36
[image_display] => /new/images/vehicles/users/42/image.jpg
)
[2] => Array
(
[vehicle_id] => 36
[image_display] => /new/images/vehicles/users/42/vehicle1.jpg
)
[3] => Array
(
[vehicle_id] => 35
[image_display] => /new/images/vehicles/users/42/vehicle.jpg
)
[4] => Array
(
[vehicle_id] => 39
[image_display] => placeholder
)
)
Теперь, когда я выполняю foreach (включая стиль начальной загрузки 4), он показывает только 2 автомобиля вместо 3; 2 автомобиля, которые он показывает, выглядят именно так, как я хочу:
<div class = "container-fluid">
<div class = "row no-gutters">
<?php
$your_listings = owner_listings($_SESSION['user']);
if (!($your_listings[0])) {
echo '<div class = "col-sm"><div class = "alert alert-danger" role = "alert"><i class = "fas fa-exclamation"></i> You do not have any listings active at this time.</div></div>';
}
else {
foreach ($your_listings as $i => $item) {
$make = $your_listings[0][$i]['vehicle_make'];
$model = $your_listings[0][$i]['vehicle_model'];
$year = $your_listings[0][$i]['vehicle_year'];
$vehicle = $your_listings[0][$i]['vehicle_id'];
$image = $your_listings[1][$i]['image_display'];
if ($image != 'placeholder') {
echo '<div class = "col-sm"><div class = "card" style = "width: 18rem;">
<h5 class = "card-title text-center font-weight-bold">'.$year.' '.$make.' '.$model.'</h5>
<img class = "card-img-top" src = "'.$image.'" alt = "'.$year.' '.$make.' '.$model.'">
<div class = "card-body">
<a href = "#" class = "btn btn-primary edit_button" value = "'.$vehicle.'" id = "'.$vehicle.'" data-vehicle = "'.$vehicle.'">Edit</a>
</div>
</div></div>';
}
else {
if ($your_listings[0][$i]['vehicle_type'] == 'atv') {
$image = '/new/images/vehicles/types/atv.png';
}
elseif ($your_listings[0][$i]['vehicle_type'] == 'jeep') {
$image = '/new/images/vehicles/types/jeep.png';
}
elseif ($your_listings[0][$i]['vehicle_type'] == 'motorcycle') {
$image = '/new/images/vehicles/types/motorchycle.png';
}
echo '<div class = "col-sm"><div class = "card" style = "width: 18rem;">
<h5 class = "card-title text-center font-weight-bold">'.$year.' '.$make.' '.$model.'</h5>
<img class = "card-img-top" src = "'.$image.'" alt = "'.$year.' '.$make.' '.$model.'">
<div class = "card-body">
<a href = "#" class = "btn btn-primary edit_button" value = "'.$vehicle.'" id = "'.$vehicle.'" data-vehicle = "'.$vehicle.'">Edit</a>
</div>
</div></div>';
}
}
}
?>
</div>
</div>
Я слишком долго смотрел на это? Что я делаю неправильно? Любая помощь приветствуется.
Спасибо!
Извините, если бы вы отправили ответ, я бы его принял! Ответ, который я принял, также включал пример :)
Я уже опубликовал его, но если другой ответ лучше, вы тоже можете это принять :)






Вы зацикливаете исходный массив, который, как вы сказали, имеет два массива. Вам нужно пройти только первый элемент массива your_listings, чтобы получить три автомобиля.
if (!($your_listings[0])) {
echo '<div class = "col-sm"><div class = "alert alert-danger" role = "alert"><i class = "fas fa-exclamation"></i> You do not have any listings active at this time.</div></div>';
}
else {
foreach ($your_listings as $i => $item) { // should be foreach ($your_listings[0] as $i => $item) {
$make = $item['vehicle_make'];
$model = $item['vehicle_model'];
Попробуйте этот ответ ...
<div class = "container-fluid">
<div class = "row no-gutters">
<?php
$your_listings = owner_listings($_SESSION['user']);
if (!($your_listings[0]))
{
echo '<div class = "col-sm"><div class = "alert alert-danger" role = "alert"><i class = "fas fa-exclamation"></i> You do not have any listings active at this time.</div></div>';
}
else
{
$newarray = array();
foreach($your_listings[0] as $i => $item)
{
$newarray[$item["vehicle_id"]] = $item["image_display"];
}
foreach ($your_listings[0] as $i => $item)
{
$make = $item['vehicle_make'];
$model = $item['vehicle_model'];
$year = $item['vehicle_year'];
$vehicle = $item['vehicle_id'];
$image = $newarray[$vehicle];
if ($image != 'placeholder')
{
echo '<div class = "col-sm"><div class = "card" style = "width: 18rem;">
<h5 class = "card-title text-center font-weight-bold">'.$year.' '.$make.' '.$model.'</h5>
<img class = "card-img-top" src = "'.$image.'" alt = "'.$year.' '.$make.' '.$model.'">
<div class = "card-body">
<a href = "#" class = "btn btn-primary edit_button" value = "'.$vehicle.'" id = "'.$vehicle.'" data-vehicle = "'.$vehicle.'">Edit</a>
</div>
</div></div>';
}
else
{
if ($item['vehicle_type'] == 'atv') {
$image = '/new/images/vehicles/types/atv.png';
}
elseif ($item['vehicle_type'] == 'jeep') {
$image = '/new/images/vehicles/types/jeep.png';
}
elseif ($item['vehicle_type'] == 'motorcycle') {
$image = '/new/images/vehicles/types/motorchycle.png';
}
echo '<div class = "col-sm"><div class = "card" style = "width: 18rem;">
<h5 class = "card-title text-center font-weight-bold">'.$year.' '.$make.' '.$model.'</h5>
<img class = "card-img-top" src = "'.$image.'" alt = "'.$year.' '.$make.' '.$model.'">
<div class = "card-body">
<a href = "#" class = "btn btn-primary edit_button" value = "'.$vehicle.'" id = "'.$vehicle.'" data-vehicle = "'.$vehicle.'">Edit</a>
</div>
</div></div>';
}
}
}
?>
</div>
</div>
Это происходит из-за
foreach ($your_listings as $i => $item) {, ваша переменная$your_listingsимеет только 2 массива0,1в качестве ключей :)