2013-05-01 232 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"; 
} 

相當快,沒有循環,簡單...但是,它只會告訴你,你搜索的東西是否存在。可以擴展名爲&的名稱並將其轉換回數組。

希望這可以幫助那裏的人。

相關問題