Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从多维数组中获取具有特定键/值对的特定数组_Php_Multidimensional Array - Fatal编程技术网

Php 如何从多维数组中获取具有特定键/值对的特定数组

Php 如何从多维数组中获取具有特定键/值对的特定数组,php,multidimensional-array,Php,Multidimensional Array,在PHP中 如果我有一个这样的多维数组,我怎么能在不使用foreach、for或任何循环的情况下得到唯一一个键highlight=1的数组呢?可能吗 array( array( [id] => xxx, [name] => blah, [highlight] => 0 ), array( [id] => yyy, [name] => blahblah, [highlight] => 1 ), array(

在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\u 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\u map
array\u reduce
array\u 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和名称,并转换回数组


希望这对其他人有所帮助。

json\u encode
然后
preg\u match\u all
当几乎所有东西都使用循环时,你为什么害怕循环?试试这个@Baba我不害怕循环,就像我有我的数据库一样,如果那是一组照片,只有一张高光=1,我不想循环1000张照片来获得一张。如果不可能,我更喜欢更改DB并以另一种方式进行。是的,我们使用了很多循环,但这是你能做的最糟糕的事情,就记忆而言,这是微观优化。。。PHP循环实际上非常快。你能详细说明为什么你认为最好的方法是
array\u filter
,而不仅仅是循环吗?@hakre我很懒,这是我能想到的最简单的方法。我非常怀疑在常规循环中这样做是否有任何性能优势。