2017-08-10 47 views
0
$alllist = array(
    "link" => $link, 
    "title" => $title, 
    "imgurl" => $imgURL, 
    "price" => $price, 
    "mname" => $merchantname, 
    "description" => $description, 
); 

$all[] = $alllist; 

我试图阵列$all其中mname一定值过滤,让我们说“亚马逊”。我怎么做?PHP array_filter

我想这一点,但没有奏效:

reset($all); 

$all_filter = array_filter($all, function(filter) use ($all) { 
    $key = key($all); 
    next($all); 
    return key($all) === 'Amazon'; 
}); 
+0

请更新您的问题,更明确的输入示例,预期输出和实际输出。另外,试着更清楚地解释“你没有工作”的含义,因为可能会发生各种不同的方式。 –

回答

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

我累了,这没有按预期工作:$ all_filter = array_filter($ all,function($ item){ return $ item ['mname'] === $ merchant; }); – apptikka

+0

你的代码与我的有什么不同?请粘贴它,因为我非常确定这可以100%的工作。检查字符串的senstivite(尝试将'==='改为'==',因为您也检查了类型。 ''' –

0

array_filter()会遍历array你。您无需拨打reset()next()

有关更多信息和示例,您应该查看array_filter() documentation

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

我想这就是你想要什么:

$name = 'Amazon'; 

$all_filter = array_filter($all, function (array $item) use ($name) { 
    return array_key_exists('mname', $item) && $item['mname'] === $name; 
}); 
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值,并且这些项目将被包含在结果中。

+0

尝试过,但没有奏效: – apptikka