2

PHPでこのような多次元配列がある場合、foreach、for、またはその他の種類のループを使用せずに、キーが強調表示されている= 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_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:

ライブデモを見る

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

かなり高速で、ループがなく、シンプルです...ただし、検索したものが存在するかどうかしかわかりません。拡張して ID と名前を取得し、配列に戻すことができます。

これが誰かを助けることを願っています。

于 2014-10-16T14:37:15.130 に答える
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 に答える