在PHP中如果我有一个像这样的多维数组,那么在不使用foreach、for或任何类型的循环的情况下,我如何获得唯一一个关键字highlight=1的数组?有可能吗?
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; });
您不应该害怕循环,因为在这种情况下,几乎所有可以使用的函数都使用循环(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";
}
相当快,没有循环,简单。。。然而,它只会告诉你所搜索的内容是否存在。可以扩展为获取id&名称并转换回数组。
希望这能帮助到其他人。
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) }