【问题标题】:PHP foreach loop accessing different parts of multidimensional arrayPHP foreach循环访问多维数组的不同部分
【发布时间】:2016-02-08 22:53:23
【问题描述】:

我仍在尝试了解 php foreach 循环如何访问它的某些部分。我有一个这样的数组设置:

$product = Array
(
    [SX- Light weight] => Array
        (
            [bronze] => 4
            [silver] => 5
            [gold] => 6
        )

    [SS- Light weight] => Array
        (
            [bronze] => 4
            [silver] => 5
            [gold] => 6
        )
)

我有一个这样设置的 foreach 循环:

foreach ($product as  $name => $value) {
        # code...
        echo '<option value="'.$name.'">'.$name.'</option>'; 

    }

这让我吐槽$name,例如“SX-轻量级”。我如何访问[bronze] 4 号?

【问题讨论】:

  • 要访问子数组元素,您需要使用另一个 foreach 循环,或者直接通过 $value['bronze'] 等访问它们。
  • * 您应该将数组的索引放在引号中。不这样做会起作用,但会发出警告。

标签: php arrays foreach


【解决方案1】:
foreach ($product as $name => $value) {
    // display 'bronze' index's value (assuming it is defined)
    echo 'For product '.$name.', bronze value = '.$value['bronze'];
}

您可能还希望使用子循环显示所有“金属”:

foreach ($product as $name => $value)
{
  echo "For product ".$name.", values are: \n";

  // assuming $value is an associative array
  foreach ($value as $metal => $number)
  {
    echo "- ".$metal.": ".$number."\n";
  }
}

【讨论】:

    【解决方案2】:

    在二维中可视化这个二维数组可能有助于您理解,有点像电子表格。

                      [bronze][silver][gold]
    [SX- Light weight]   4       5       6
    [SS- Light weight]   4       5       6
    

    foreach 循环遍历行。这意味着在

    foreach ($product as  $name => $value) {
    

    $value 不是单个值,它是一行,是一个包含青铜、白银和黄金列值的数组。所以在这个循环的第一次迭代中,例如,$value 将包含

    array('bronze' => 4, 'silver' => 5, 'gold' => 6)
    

    您可以遍历行中的每一列,并通过使用另一个 foreach 来处理这些值,但如果您只需要访问特定列,您可以使用它的键来指定您想要的列,就像这样:

    echo $value['bronze'];
    

    将二维数组的内容视为行和列是一种非常常见的可视化。事实上,在 PHP 5.5+ 中有 array_column 函数,它允许您将特定列中的所有值拉入一个新数组中。

    $bronze = array_column($product, 'bronze');  // for example.
    

    显然,如果数组超出二维,这种可视化就会变得不那么有用。

    【讨论】:

      【解决方案3】:

      从值中引用它。

      foreach ($product as  $name => $value) {
          echo $value['bronze']; 
      }
      

      【讨论】:

        【解决方案4】:

        在 PHP 中使用 foreach 命令循环遍历多维数组将取决于数组的结构。

        例如:

        <?php
        
        // Let's build the array structure
        $array[1]['name'] = "John";
        $array[1]['phone'] = "+1 888 9567834";
        $array[2]['name'] = "Doe";
        $array[2]['phone'] = "+44 32 5600 673";
        $array[3]['name'] = "Robert";
        $array[3]['phone'] = "+1 45 5634 0843";
        $array[4] = "Maria";
        
        
        foreach ($array as $key1 => $value)
        {
            echo "<br> Value: $key1 Value: $value<br>";
        
            // If it's an array, let's do another look inside it
            if (is_array($value))
            {
                foreach ($value as $key2)
                {
                    echo "---- $key2 <br>";
                }
            }
        
            // if it's a simple string (non-array), let's print it
            else
            {
                echo "---- $value";
            }
        }
        
        
        ?>
        

        查看这篇文章了解更多关于looping through array in PHP的信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-06
          • 2011-08-30
          • 1970-01-01
          • 2010-10-24
          • 2014-12-29
          • 2015-06-02
          • 1970-01-01
          相关资源
          最近更新 更多