2011-06-27 113 views
0

我有以下格式的多維數組多維數組:搜索特定值

[0] = (
    'id' => '1', 
    'type' => 'fish', 
    'owner' => 'bob', 
) 

[1] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'mary', 
) 

[2] = (
    'id' => '3', 
    'type' => 'dog', 
    'owner' => 'larry', 
) 

[3] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'fred', 
) 

我想搜索的價值,他們返回一個包含所有鍵的數組相同排列,看起來像這樣在用於type =貓搜索:

[0] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'mary', 
) 

[1] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'fred', 
) 

我知道我試圖把數組作爲一個數據庫,但在這種情況下,它並不需要存儲動態數據一旦程序結束。

有什麼建議嗎?

+1

是啊,試試看... – amosrivera

+0

@amosrivera給予的東西試試? – Drazisil

+0

記得選擇一個接受的答案,如果你找到一個。 – Neal

回答

7

循環通過陣列:

function loopAndFind($array, $index, $search){ 
     $returnArray = array(); 
     foreach($array as $k=>$v){ 
       if($v[$index] == $search){ 
        $returnArray[] = $v; 
       } 
     } 
     return $returnArray; 
} 

//use it: 
$newArray = loopAndFind($oldArray, 'type', 'cat'); 
+0

這工作完美。非常感謝你。 – Drazisil

+0

@Drazisil,沒問題^ _ ^隨時 – Neal

-2

你必須遍歷數組,如:

foreach ($array as $i => $values) { 
    print "$i {\n"; 
    foreach ($values as $key => $value) { 
     print " $key => $value\n"; 
    } 
    print "}\n"; 
} 

,然後再檢查「類型」鍵值.... 然後記錄該匹配必須將其複製到新陣列...

+0

@Ovais ....我不知道**你在這裏做什麼** ... – Neal

+0

我剛剛已經遍歷,因爲你在你的回覆中做過,並且有書面描述他應該將匹配結果保存在新數組中......這就是您通過代碼顯示的結果。 –

-1

而不是使用數字索引應該使用'類型'作爲索引。

你原來的數組是這樣的:

[fish] = Array(0 => Array(
     'id' => '1', 
     'owner' => 'bob', 
    ), 
    1 => Array(
     'id' => '2', 
     'type' => 'cat', 
     'owner' => 'fred', 
    ) 
) 

[cat] = Array(0 => Array(
     'id' => '2', 
     'owner' => 'mary', 
    ) 
) 

[dog] = Array(0 => Array(
     'id' => '3', 
     'owner' => 'larry', 
    ) 
) 

現在如果你想所有的魚,你只是做$myArray[ 'fish' ];

+0

這可能涉及一些密集的代碼重新哈希...... – Neal

+0

它是數字,因爲它是一個數組。如果我要走你的路,我會爲每種類型都有一個數組,這會導致我在使用數組之前必須檢查數組是否存在,因爲我不知道我有什麼類型。另外,我也有類型爲空白的記錄。 – Drazisil