过滤二维数组以保留特定列中包含特定值的行[重复]

问题描述 投票:0回答:4

我正在通过循环以下代码构建一个包含关联行的数组。

$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';
});
php arrays multidimensional-array filtering associative-array
4个回答
1
投票

我想这就是你想要的:

$name = 'Amazon'; 

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

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);

0
投票

array_filter()
将为您迭代
array
。您无需致电
reset()
next()

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

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

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
值,并且这些项目将包含在结果中。

© www.soinside.com 2019 - 2024. All rights reserved.