![](/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.