[英]PHP array_filter
$alllist = array(
"link" => $link,
"title" => $title,
"imgurl" => $imgURL,
"price" => $price,
"mname" => $merchantname,
"description" => $description,
);
$all[] = $alllist;
我正在尝试过滤数组$all
,其中mname
是某个值,比如说'Amazon'。 我怎么做?
我试过了,但是没有用:
reset($all);
$all_filter = array_filter($all, function(filter) use ($all) {
$key = key($all);
next($all);
return key($all) === 'Amazon';
});
我认为这是您想要的:
$name = 'Amazon';
$all_filter = array_filter($all, function (array $item) use ($name) {
return array_key_exists('mname', $item) && $item['mname'] === $name;
});
$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);
array_filter()
将为您遍历array
。 您不需要调用reset()
或next()
。
您应该查看array_filter()文档以获取更多信息和示例。
$all_filter = array_filter($all, function($item) {
return $item['mname'] === 'Amazon';
});
看起来您正在使它变得比所需的更加复杂。 回调应该只返回一个布尔值。 如果您不想对要过滤的值进行硬编码(例如'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
值,并且这些项目将包含在结果中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.