2013-02-25 74 views
0

我最初的陣列是PHP創建另一個陣列的搜索結果的新數組

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

什麼是我可以做得到獲得這一新結果的最簡單的解決方案。

+0

有什麼標準決定新數組中發生的事情? – 2013-02-25 19:49:31

+0

http://stackoverflow.com/questions/8440073/filter-array-by-key – 2013-02-25 19:53:16

+0

或http://www.php.net/manual/en/language.types.array.php? – 2013-02-25 19:55:17

回答

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

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

} 

這很簡單地循環遍歷第一個數組,並檢查內部數組中的「area」的值。如果該值等於「工藝品」,則可以將其放入一個名爲$ employees2的新數組中。如果您想自定義密鑰,您可以將工藝更改爲任何您想要的,並在員工中的[]之間添加所需的任何內容。

+0

我試過這個方法,我得到一個錯誤「employees2 undefined。「 – user2108555 2013-02-25 23:40:18

+0

Ha!我得到了這個工作,如果我將include鏈接移動到這個代碼的上面,通常會有所幫助,否則腳本不知道在哪裏找到這些數據,我多麼愚蠢,非常感謝您的幫助。我的可怕的一天 – user2108555 2013-02-26 05:59:46

+0

@ user2108555如果你發現答案是正確的,你能否把它標記爲正確答案,謝謝 – James 2013-02-26 08:37:06

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。

+0

我試過這個方法,並且收到一個錯誤「employees2未定義的變量」。 – user2108555 2013-02-26 00:09:49

+0

我運行的代碼,並沒有給我錯誤....其var_dump數組罰款,$ employee2在這一行中定義$ employees2 = array(); – Hackerman 2013-02-26 00:55:51

0

您可以通過使用一個實用工具,帶庫Underscore.php(http://brianhaveri.github.com/Underscore.php/

有許多陣列 - 「拔毛」的方法,爲您節省了需要編寫簡化的語法(而不是algorythmic複雜)循環,但在發動機蓋下,它與上述答案中所描述的大致相同。

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"; 
} 
?> 
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); 
相關問題