2013-05-01 127 views
2

in PHP 如果我有像这样的多维数组我怎么才能得到唯一的数组有关键高亮= 1,而不使用foreach ,或者任何类型的循环?可能吗?如何从多维数组中获取特定键/值对的特定数组

array(
array(
    [id] => xxx, 
    [name] => blah, 
    [highlight] => 0 

), 
array(
    [id] => yyy, 
    [name] => blahblah, 
    [highlight] => 1 
), 
array(
    [id] => zzz, 
    [name] => blahblahblah, 
    [highlight] => 0 
), 
) 

感谢

+4

'json_encode'然后'preg_match_all' << ==最糟糕的想法有史以来 – 2013-05-01 11:22:03

+1

lol @johaharkes :) – LeonardChallis 2013-05-01 11:25:07

+0

为什么你几乎所有使用循环时都害怕循环? – Baba 2013-05-01 11:34:43

回答

5

除非我记错了,这是不可能不进行某种循环。我能想到的最好的解决办法是使用array_filter(),然而,这在本质上是一样的循环:

$theArray = array_filter($array, function($v) { return $v['highlight'] == 1; }); 
+0

看到............ – Baba 2013-05-01 11:36:29

+0

谢谢@billyonecan – 2013-05-01 11:57:17

+0

你能否详细说明为什么你认为'array_filter'最好的东西不仅仅是一个循环? – hakre 2013-05-01 12:28:51

0

的替代billyonecan的正确答案应该是返回一个索引你的阵列,而不是制作一份拷贝阵列,具体如下:

<?php 

$test = array(
    array(
    'id' => xxx, 
    'name' => blah, 
    'highlight' => 0 

), 
    array(
    'id' => yyy, 
    'name' => blahblah, 
    'highlight' => 1 
), 
    array(
    'id' => zzz, 
    'name' => blahblahblah, 
    'highlight' => 0 
), 
); 

$myKey = null; 

array_walk($test, function(&$item1, $key) { 
    global $myKey; 
    if ($item1['highlight'] == 1) { 
    $myKey = $key; 
    } 
}); 

var_dump($test[$myKey]); 
// array(3) { ["id"]=> string(3) "yyy" ["name"]=> string(8) "blahblah" ["highlight"]=> int(1) } 
2

你不应该害怕的循环,因为几乎所有的功能,你可以在这种情况下,使用循环(arrap_maparray_reducearray_walk等)使用....等

对于它的乐趣,你可以尝试goto:d

START: // your array 
O1: $num = - 1; $found = array(); $total = count($array); 
O2: $num ++; 
O3: if ($num >= $total) goto O6; 
O4: if ($array[$num]['highlight'] == 1) $found[] = $array[$num]; 
O5: goto O2; 
O6: print_r($found); 
END: 

See live Demo it works

1

,如果你不希望使用一个循环,但哈希表PHP提供开箱你需要以不同的键阵列为阵列。

1
$json = (json_encode($array)); 
if (stripos($json,'"highlight":"1"')){ 
    echo "exists"; 
}else{ 
echo "doesn't"; 
} 

相当快,没有循环,简单...但是,它只会告诉你,你搜索的东西是否存在。可以扩展名为&的名称并将其转换回数组。

希望这可以帮助那里的人。