我一直在研究一些测试题。关于数组迭代的一个问题。这是:
假设,迭代$ myarray数组的最佳方法是什么 你想像你一样修改每个元素的值吗?
<?php $myarray = array ("My String", "Another String", "Hi, Mom!"); ?>
一个。使用for循环
B中。使用foreach循环
℃。使用while循环
d。使用do ... while循环
电子。没有办法实现这个目标
我的答案是“当然是foreach循环”。但根据答案表:
通常,foreach语句是最合适的构造 迭代一个数组。但是,因为我们被要求 修改数组中的每个元素,此选项不可用,因为 foreach在数组的副本上工作,因此会导致 增加了开销。虽然while循环或do ... while循环可能有效, 因为数组是顺序索引的,所以for语句最好 适合任务,使答案A正确。
我仍然认为foreach是最好的。只要我将它与密钥一起使用,我就可以修改值。
<?php
foreach($myarray as $k=>$v){
$myarray[$k] = "Modified ".$v;
}
?>
我错过了什么吗?
答案 0 :(得分:7)
根据答卷:
此选项不可用,因为foreach在数组的副本上工作,因此会导致额外的开销
无意义。
如果您需要证明,可以参考以下值:
<?php
foreach($myarray as &$v){
$v = "Modified ".$v;
}
?>
我仍然认为foreach是最好的。只要我使用密钥,我就可以修改值。
我同意。
我错过了什么吗?
没有
答案 1 :(得分:1)
http://php.net/manual/en/function.array-walk.php
array_walk($myarray, "modify");
function modify($value)
{
$value = "modified " . $value;
}
如果要将其应用于多个数组,您甚至可以使用array_map()
答案 2 :(得分:0)
您也可以
<?php
foreach($myarray as &$v){
$v = "Modified ".$v;
}
?>
或者在某些情况下,如果你有一个足以完成这项工作的功能:
$myarray = array_map( "trim", $myarray );
它将修剪函数应用于数组中的每个元素并返回修改后的版本。