【问题标题】:Foreach not showing all items in multidimensional arrayForeach 未显示多维数组中的所有项目
【发布时间】:2018-04-07 04:44:09
【问题描述】:

这是我很久以来的第一个问题,非常感谢任何帮助!

我有一个存储车辆的数据库和一个存储车辆图像的数据库。我正在使用 INNER JOIN 来获取车辆列表及其图像。数据库查询后,我把return放到一个数组中;所以 1 个数组中有 2 个数组:

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] => user@user.com
            [vehicle_make] => Jeep
            [vehicle_year] => 2008
            [vehicle_model] => cherokee
        )

    [1] => Array
        (
            [vehicle_id] => 36
            [vehicle_type] => motorcycle
            [vehicle_vin] => 1234
            [owner_email] => user@user.com
            [vehicle_make] => honda
            [vehicle_year] => 2018
            [vehicle_model] => random
        )

    [2] => Array
        (
            [vehicle_id] => 39
            [vehicle_type] => atv
            [vehicle_vin] => 3215
            [owner_email] => user@user.com
            [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(包括 bootstrap 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 =&gt; $item) { 你的变量 $your_listings 只有 2 个数组 0,1 作为键 :)
  • 抱歉——如果您提交了答案,我本可以接受的!我接受的答案还包括一个例子:)
  • 我已经发布了,但如果另一个答案比你也可以接受:)

标签: php arrays multidimensional-array foreach


【解决方案1】:

您正在循环原始数组,如您所说,它有两个数组。你想要的是只循环 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'];

【讨论】:

    【解决方案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 
            {
                $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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多