在PHP中过滤数组中的值

时间:2014-01-11 17:01:46

标签: php arrays string-comparison

我想编写一个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" )
);

2 个答案:

答案 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循环遍历数组时,不得修改数组。

另请参阅issetarray_key_exists的区别:对于isset值的已使用密钥,NULL为false。

工作foreach方法

如果要使用foreach循环,则必须使用新数组来存储结果。 jszobody’s answer已经涵盖了这种可能性。

答案 1 :(得分:0)

您可以使用简单的foreach循环执行此操作:

foreach($variable AS $item) {
    if($item['file'] == "new") $newarray[] = $item;
}

见这里:http://3v4l.org/N8Mum