PHP中的foreach语句是遍历数组的一个重要工具。当遇到多维数组时,使用foreach语句需要更多的注意和技巧。本文就将着重介绍php foreach多维数组的遍历方法。
对于以下多维数组:
$animal = array( "dog" =>array( "name" =>"Rusty", "age" =>3 ), "cat" =>array( "name" =>"Milo", "age" =>2 ), "fish" =>array( "name" =>"Nemo", "age" =>1 ) );我们可以使用foreach语句对其进行遍历:
foreach($animal as $key=>$subarray){ echo "$key:\n"; foreach($subarray as $subkey=>$value){ echo "$subkey=$value\n"; } echo "\n"; }以上的代码将输出:
dog: name=Rusty age=3 cat: name=Milo age=2 fish: name=Nemo age=1首先我们定义了一个外部迭代器$animal,它将遍历每个子数组。 对于每个子数组,我们需要进一步进行遍历。我们定义了另一个内部迭代器$subarray,并且将其作为foreach语句的第二个参数。 在内部foreach语句中,我们遍历了每个子数组的元素,定义了$key作为键名,$value作为键值。 如果我们现在需要删除数组animal中年龄为2岁的宠物,我们可以在内部foreach语句中添加if语句:
foreach($animal as $key=>$subarray){ echo "$key:\n"; foreach($subarray as $subkey=>$value){ if($subkey == "age" && $value==2){ unset($animal[$key]); continue 2; } echo "$subkey=$value\n"; } echo "\n"; }在内部foreach语句中,我们首先检查当前遍历到的元素是否为年龄($subkey == "age" && $value==2)。 如果是,我们使用unset语句删除整个子数组(unset($animal[$key]))。然后使用continue语句跳过当前循环,继续下一个循环。 如果我们现在需要对数组中的宠物进行排序,按照宠物的姓名进行升序排序,我们可以:
$names_array = array(); foreach ($animal as $key =>$subarray) { $names_array[$key] = $subarray['name']; } // 按照键名(宠物名姓名)排序 array_multisort($names_array, SORT_ASC, $animal); // 遍历排序好的数组 foreach($animal as $key=>$subarray){ echo "$key:\n"; foreach($subarray as $subkey=>$value){ echo "$subkey=$value\n"; } echo "\n"; }我们首先使用foreach语句遍历数组,将每个宠物的名字存入一个 names_array 数组,键名为宠物名字,键值为宠物的名字。然后,我们使用array_multisort 函数对 names_array 进行排序,并将排序好的结果直接应用到原数组 animal 中。最后,我们再次遍历排好序的数组并将其打印出来。