2017-08-10 49 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