2011-06-27 75 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