2

在 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
),
)

谢谢

4

5 回答 5

5

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

$theArray = array_filter($array, function($v) { return $v['highlight'] == 1; });
于 2013-05-01T11:29:15.063 回答
2

您不应该害怕循环,因为在这种情况下您可以使用的几乎所有功能都使用循环(arrap_map,,array_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:

观看现场演示它的工作原理

于 2013-05-01T11:51:05.460 回答
1
$json = (json_encode($array));
if (stripos($json,'"highlight":"1"')){
    echo "exists";
}else{ 
echo "doesn't";
}

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

希望这可以帮助那里的人。

于 2014-10-16T14:37:15.130 回答
1

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

于 2013-05-01T11:57:08.127 回答
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) } 
于 2013-05-01T11:39:18.537 回答