PHP array_filter

时间:2017-08-10 17:02:46

标签: php array-filter

$alllist = array(
    "link" => $link, 
    "title" => $title, 
    "imgurl" => $imgURL,
    "price" => $price,
    "mname" => $merchantname,
    "description" => $description,
);

$all[] = $alllist;

我正在尝试过滤$all数组mname,其中reset($all); $all_filter = array_filter($all, function(filter) use ($all) { $key = key($all); next($all); return key($all) === 'Amazon'; }); 是某个值,让我们说'亚马逊'。我该怎么做?

我尝试了这个,但它不起作用:

zgrep "$(tr '[:upper:]' '[:lower:]' <<<"MYPATTERN")" *.gz

4 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

$name = 'Amazon'; 

$all_filter = array_filter($all, function (array $item) use ($name) {
    return array_key_exists('mname', $item) && $item['mname'] === $name;
});

答案 1 :(得分:0)

$all[] = array("link"=> 1, "title"=> 2, "imgurl"=> 3, 
"price"=>4, "mname"=>'Amazon', "description"=>5);


$all[] = array("link"=> 1, "title"=> 2, "imgurl"=> 3, 
"price"=>4, "mname"=>'Facebook', "description"=>5);

$filtered = array_filter($all, function($item) {
return $item['mname'] === 'Amazon';
});

var_dump($filtered);

答案 2 :(得分:0)

array_filter()会为您重复array。您无需致电reset()next()

您应该查看array_filter() documentation以获取更多信息和示例。

$all_filter = array_filter($all, function($item) {
    return $item['mname'] === 'Amazon';
});

答案 3 :(得分:0)

看起来你正在使它变得比它需要的更复杂。回调应该只返回一个布尔值。如果您不想对要过滤的值进行硬编码(例如'Amazon'),则可以使用use将其传递给回调。

$filter_value = 'Amazon';

$all_filter = array_filter($all, function($item) use($filter_value) {
    // without use($filter_value), $filter_value will be undefined in this scope
    return $item['mname'] == $filter_value;
});

返回布尔表达式$item['mname'] == $filter_value;将确定哪些项具有与过滤器值匹配的mname值,并且这些项将包含在结果中。