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

时间:2013-05-01 11:19:28

标签: php multidimensional-array

PHP中的

如果我有一个像这样的多维数组,我怎样才能获得唯一具有键高亮= 1的数组,而不使用foreach,for或任何类型的循环?有可能吗?

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

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

感谢

5 个答案:

答案 0 :(得分:5)

除非我弄错了,否则不能执行某种循环。我能想到的最好的解决方案是使用array_filter(),但这与循环基本相同:

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

答案 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

答案 2 :(得分:1)

如果您不想使用循环,则需要以不同的方式键入数组,但是散列表PHP提供了开箱即用的数组。

答案 3 :(得分:1)

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

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

希望这可以帮助那些人。

答案 4 :(得分: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) }