我想编写一个array_cmp
函数,其功能如下:
$variable = Array(
[0] => Array( [id]=>"1" [file]=>"new" )
[1] => Array( [id]=>"2" [file]=>"sample" )
[2] => Array( [id]=>"3" [file]=>"new" )
[3] => Array( [id]=>"4" [file]=>"garden" )
[4] => Array( [id]=>"5" [file]=>"new" )
[5] => Array( [id]=>"6" [file]=>"tem" )
);
$compare = "new";
$new_array = array_cmp($variable, $compare);
print_r($new_array);
期望的输出(浓缩):
Array(
[0] => Array( [id]=>"1" [file]=>"new" )
[1] => Array( [id]=>"3" [file]=>"new" )
[2] => Array( [id]=>"5" [file]=>"new" )
);
答案 0 :(得分:1)
array_filter
方法您正在寻找array_filter
。
$variable = array_filter($variable, function($elem) {
return isset($elem['file']) && $elem['file'] == 'new';
});
foreach
方法请确保不要删除foreach
循环中不需要的元素,因为它没有明确定义的行为。以下代码不起作用!
foreach ($variable as $elem) {
if (array_key_exists('file', $elem) && $elem['file'] != 'new') {
unset($elem['file']);
}
}
再一次:这种方法被打破了。使用foreach
循环遍历数组时,不得修改数组。
另请参阅isset
和array_key_exists
的区别:对于isset
值的已使用密钥,NULL
为false。
foreach
方法如果要使用foreach
循环,则必须使用新数组来存储结果。 jszobody’s answer已经涵盖了这种可能性。
答案 1 :(得分:0)
您可以使用简单的foreach
循环执行此操作:
foreach($variable AS $item) {
if($item['file'] == "new") $newarray[] = $item;
}