Foreach не показывает все элементы в многомерном массиве

Это мой первый вопрос за долгое время, я очень благодарен за любую помощь!

У меня есть одна база данных, в которой хранятся автомобили, и одна база данных, в которой хранятся их изображения. Я использую ВНУТРЕННЕЕ СОЕДИНЕНИЕ, чтобы получить список транспортных средств и их изображения. После запроса к базе данных я помещаю результат в массив; поэтому 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>

Я слишком долго смотрел на это? Что я делаю неправильно? Любая помощь приветствуется.

Спасибо!

Это происходит из-за foreach ($your_listings as $i => $item) {, ваша переменная $your_listings имеет только 2 массива 0,1 в качестве ключей :)

Praveen Kumar 07.04.2018 06:47

Извините, если бы вы отправили ответ, я бы его принял! Ответ, который я принял, также включал пример :)

yooooooooooo 07.04.2018 07:01

Я уже опубликовал его, но если другой ответ лучше, вы тоже можете это принять :)

Praveen Kumar 07.04.2018 07:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
436
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы зацикливаете исходный массив, который, как вы сказали, имеет два массива. Вам нужно пройти только первый элемент массива 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>

Другие вопросы по теме