使用php打印多维数组,数组以关联格式存储

时间:2019-10-27 07:15:31

标签: php arrays multidimensional-array

我正在学习php,但是在练习时遇到了问题。我用项目值创建了一个多维数组,并且正在使用for循环打印这些值,但是我得到了

  

错误:未定义的偏移量

数组格式是关联的。

要求:

1)使用for循环/ foreach循环打印所有值

2)如果任何关联数组为空,请避免

3)检查它是数组还是单个值,例如某些值又具有自己的数组

$item_list=array();  //multidimensional array with associative values
echo '<pre>';print_r($item_list);

Array
(
    [total_price] => 1200
    [item_1] => Array
        (
            [item_name1] => xyz
            [item_price1] => 100.00

        )

    [item_2] => Array
        (
            [item_name2] => abc
            [item_price2] => 200.00

        )


    [item_3] => 
    [item_4] => Array
        (
            [item_name3] => aaa
            [item_price3] => 402.00
        )

)

//我用来回显所有值的代码

for ($row = 0; $row < count($item_list); $row++) {
  // if value contain array then go to nested for loop else print direct value
  echo "<ul>";
  for ($col = 0; $col < count($item_list[$row]); $col++) {

    //echo "<li>".$item_list[$row][$col]."</li>";
    echo "<li>".array_values($item_list[$row])[$col]."</li>";

  }
  echo "</ul>";
}

1 个答案:

答案 0 :(得分:1)

由于数组是关联数组,因此无法在for循环中使用数字索引访问值。而是在元素上使用foreach循环:

foreach ($item_list as $key => $item_details) {
    if (is_array($item_details)) {
        echo "$key:\n";
        foreach ($item_details as $name => $value) {
            echo "\t$name: $value\n";
        }
    }
    else {
        echo "$key: $item_details\n";
    }
}

输出:

total_price: 1200
item_1:
    item_name1: xyz
    item_price1: 100
item_2:
    item_name2: abc
    item_price2: 200
item_3: 
item_4:
    item_name3: aaa
    item_price3: 402

Demo on 3v4l.org

请注意,您并不清楚要实现格式化的目的,所以我只是将输出保留为简单的行格式。向其中添加<ul>/<li>结构会很容易。