php从另一个数组的搜索结果中创建一个新数组

时间:2013-02-25 19:48:36

标签: php arrays search

我的初始数组是

$employees = array(
array('name' => 'jack',
      'area' => 'crafts'),

array('name' => 'janet',
      'area' => 'aquatics'),

array('name' => 'brad',
      'area' => 'crafts')
);

我正在尝试根据另一个数组的搜索结果创建一个新数组,因此如果我搜索'crafts',新数组应该如下所示:

$employees2 = array(
array('name' => 'jack',
      'area' => 'crafts'),

array('name' => 'brad',
      'area' => 'crafts')
);

我能做的最简单的解决方案是获得这个新结果。

5 个答案:

答案 0 :(得分:0)

试试这个:

$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完成所有技巧;)

Saludos。

答案 1 :(得分:0)

foreach($employees as $key => $value){

    if($value['area']=='crafts'){
        $employees2[] = $value;
    }

}

这非常简单地遍历第一个数组并检查内部数组中“area”的值。如果该值等于“crafts”,则可以将其放入一个名为$ employees2的新数组中。如果您想自定义密钥,您可以将工艺品更改为您想要的任何内容,并在employees [2]中添加您想要的任何内容。

答案 2 :(得分:0)

您可以使用实用程序带库Underscore.php(http://brianhaveri.github.com/Underscore.php/

来简化语法(但不是algorythmic复杂性)

有许多阵列 - “拔除”方法可以节省你编写循环的需要,但在引擎盖下它的功能与上面的答案中描述的大致相同。

答案 3 :(得分:0)

我将假设可能的结果集可能很大。在这种情况下,您可能希望使用尽可能少的额外内存来处理数组。为此,我建议通过引用迭代数组并取消设置与您的条件不匹配的项目。可能比创建新数组以存储与过滤器匹配的项目的开销更小。然后,您可以检查数组是否为空,以确定过滤器是否返回任何结果。像这样:

<?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";
}
?>

答案 4 :(得分:0)

试试这个:

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