繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM