簡體   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