如何从多维数组中获取特定键/值对的特定数组
问题描述:
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
),
)
感谢
答
除非我记错了,这是不可能不进行某种循环。我能想到的最好的解决办法是使用array_filter()
,然而,这在本质上是一样的循环:
$theArray = array_filter($array, function($v) { return $v['highlight'] == 1; });
答
的替代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) }
答
你不应该害怕的循环,因为几乎所有的功能,你可以在这种情况下,使用循环(arrap_map
,array_reduce
,array_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:
答
,如果你不希望使用一个循环,但哈希表PHP提供开箱你需要以不同的键阵列为阵列。
答
$json = (json_encode($array));
if (stripos($json,'"highlight":"1"')){
echo "exists";
}else{
echo "doesn't";
}
相当快,没有循环,简单...但是,它只会告诉你,你搜索的东西是否存在。可以扩展名为&的名称并将其转换回数组。
希望这可以帮助那里的人。
'json_encode'然后'preg_match_all' 2013-05-01 11:22:03
lol @johaharkes :) – LeonardChallis 2013-05-01 11:25:07
为什么你几乎所有使用循环时都害怕循环? – Baba 2013-05-01 11:34:43