0

我的初始数组是

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

我能得到这个新结果的最简单的解决方案是什么。

4

5 回答 5

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

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

}

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

于 2013-02-25T19:59:45.670 回答
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 做所有的把戏;)

萨卢多斯。

于 2013-02-25T19:58:46.860 回答
0

您可以通过使用实用程序带库 Underscore.php ( http://brianhaveri.github.com/Underscore.php/ ) 来简化语法(但不是算法复杂性)

有许多数组“采摘”方法可以节省您编写循环的需要,但在引擎盖下,它的作用与上面答案中描述的大致相同。

于 2013-02-25T20:05:52.277 回答
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";
}
?>
于 2013-02-25T20:10:55.350 回答
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);
于 2013-02-26T05:04:39.417 回答