![](/img/trans.png)
[英]PHP - Search one associative array with an array of values, then create a new array with matching results
[英]php create a new array from search results of another array
我最初的數組是
$employees = array(
array('name' => 'jack',
'area' => 'crafts'),
array('name' => 'janet',
'area' => 'aquatics'),
array('name' => 'brad',
'area' => 'crafts')
);
我正在嘗試根據另一個數組的搜索結果創建一個新數組,因此如果我搜索“工藝品”,則新數組應如下所示:
$employees2 = array(
array('name' => 'jack',
'area' => 'crafts'),
array('name' => 'brad',
'area' => 'crafts')
);
我能得到的最簡單的解決方案是什么?
嘗試這個:
$employees = array(
array('name' => 'jack',
'area' => 'crafts'),
array('name' => 'janet',
'area' => 'aquatics'),
array('name' => 'brad',
'area' => 'crafts')
);
$employees2 = array();
foreach ($employees as $key) {
if($key['name'] == "jack")
{
array_push($employees2,array('name'=>$key['name'],'area'=>$key['area']));
}
}
var_dump($employees2);
array_push可以解決所有問題;)
禮炮。
foreach($employees as $key => $value){
if($value['area']=='crafts'){
$employees2[] = $value;
}
}
這很簡單地循環遍歷第一個數組,並檢查內部數組中“ area”的值。 如果該值等於“ crafts”,則可以將其放入一個名為$ employees2的新數組中。 如果希望自定義密鑰,可以將工藝更改為所需的任何內容,並在employees2中的[]之間添加所需的任何內容。
您可以使用實用程序皮帶庫Underscore.php( http://brianhaveri.github.com/Underscore.php/ )簡化語法(但不能簡化算法)。
有許多數組“拔除”方法可以省去編寫循環的需要,但是在引擎蓋下,它的作用與上面答案中所述的大部分相同。
我將假設可能的結果集可能很大。 在這種情況下,您將需要使用盡可能少的額外內存來處理陣列。 為此,我建議通過引用遍歷數組,並取消設置不符合您的條件的項目。 與創建一個新數組來存儲與過濾器匹配的項目相比,開銷可能更少。 然后,您可以檢查數組是否為空,以確定過濾器是否返回任何結果。 像這樣:
<?php
// maybe this will be set through an option from the UI
$area_filter = 'crafts';
// fetched results
$employees = array(
array('name' => 'jack',
'area' => 'crafts'),
array('name' => 'janet',
'area' => 'aquatics'),
array('name' => 'brad',
'area' => 'crafts')
);
// filter out the items that match your filter
foreach($employees as $i => &$employee){
if($employee['area'] != $area_filter){
unset($employees[$i]);
}
}
// do something with the results
if(!empty($employees)){
print_r($employees);
} else {
echo "Sorry, your filter '$area_filter' did not match any results\n";
}
?>
嘗試這個 :
$employees = array(
array('name' => 'jack',
'area' => 'crafts'),
array('name' => 'janet',
'area' => 'aquatics'),
array('name' => 'brad',
'area' => 'crafts')
);
$employees = array_filter($employees, function($employee) {
return ($employee['area'] == 'crafts' );
});
echo "<pre>";
print_r($employees);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.