PHP遍历多维数组的foreach循环

35

我有一个数组:

$arr_nav = array( array( "id" => "apple", 
          "url" => "apple.html",
          "name" => "My Apple" 
        ),
        array( "id" => "orange", 
          "url" => "orange/oranges.html",
          "name" => "View All Oranges",
        ),
        array( "id" => "pear", 
          "url" => "pear.html",
          "name" => "A Pear"
        )       
 );
我想使用foreach循环来替换其中的内容(只允许我设置数字)。
for ($row = 0; $row < 5; $row++)
具备展示相关数组值的.first.last类的能力。 编辑 我希望以以下方式回显数据:
<li id="' . $arr_nav[$row]["id"] . '"><a href="' . $v_url_root . $arr_nav[$row]["url"] . '" title="' . $arr_nav[$row]["name"] . '">"' . $arr_nav[$row]["name"] . '</a></li>' . "\r\n";

非常感谢您的快速回复。StackOverflow非常好!

4个回答

41
$last = count($arr_nav) - 1;

foreach ($arr_nav as $i => $row)
{
    $isFirst = ($i == 0);
    $isLast = ($i == $last);

    echo ... $row['name'] ... $row['url'] ...;
}

非常感谢!我使用以下代码:(($isLast) ? ' class="last-child"' : '')来为列表项添加一个类。 - headband-dan

5
<?php
$php_multi_array = array("lang"=>"PHP", "type"=>array("c_type"=>"MULTI", "p_type"=>"ARRAY"));

//Iterate through an array declared above

foreach($php_multi_array as $key => $value)
{
    if (!is_array($value))
    {
        echo $key ." => ". $value ."\r\n" ;
    }
    else
    {
       echo $key ." => array( \r\n";

       foreach ($value as $key2 => $value2)
       {
           echo "\t". $key2 ." => ". $value2 ."\r\n";
       }

       echo ")";
    }
}
?>

输出:

lang => PHP
type => array( 
    c_type => MULTI
    p_type => ARRAY
)

Reference Source Code


只有一个层级...我们需要更多的多维。 - aswzen
@aswzen 你可以像这样使用递归: https://dev59.com/omzXa4cB1Zd3GeqPTWyD - Hassan Amir Khan

2
如果你在谈论 a.first 和 a.last 时,指的是数组的第一个和最后一个元素,那么它的意思是这样的:
foreach ($arr_nav as $inner_array) {
    echo reset($inner_array); //apple, orange, pear
    echo end($inner_array); //My Apple, View All Oranges, A Pear
}

PHP中的数组有一个内部指针,你可以使用resetnextend来操作它。使用keycurrent来检索键/值,但在许多情况下,使用each可能更好。

抱歉表述不够清晰。我希望显示的值如下:<li id="' . $arr_nav[$row]["id"] . '"><a href="' . $v_url_root . $arr_nav[$row]["url"] . '" title="' . $arr_nav[$row]["name"] . '">' . $arr_nav[$row]["name"] . '</a></li>' . "\r\n"; 每次循环都进行检查,以向“li”添加类。 - headband-dan
这应该是被接受的答案。非常有创意!! - Rotimi

0
<?php
$first = reset($arr_nav); // Get the first element
$last  = end($arr_nav);   // Get the last element
// Ensure that we have a first element and that it's an array
if(is_array($first)) { 
   $first['class'] = 'first';
}
// Ensure we have a last element and that it differs from the first
if(is_array($last) && $last !== $first) {
   $last['class'] = 'last';
}

现在你可以在 HTML 生成器中直接输出类。可能需要一些检查来确保类已设置,或者向数组提供默认的空类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接