0

私はこのような配列を持っています

$lists=
Array ( 
[0] => Array ( [item] => Global ISDN Switchtype = primary-net5 ) 
[1] => Array ( [item] => ISDN Serial0/0/0:15 interface ) 
[2] => Array ( [item] => dsl 0, interface ISDN Switchtype = primary-net5 ) 
[3] => Array ( [item] => Layer 1 Status: ) 
[4] => Array ( [item] => ACTIVE ) 
[5] => Array ( [item] => Layer 2 Status: ) 
[6] => Array ( [item] => TEI = 0, Ces = 1, SAPI = 0, State = MULTIPLE_FRAME_ESTABLISHED ) 
[7] => Array ( [item] => Layer 3 Status: ) 
[8] => Array ( [item] => 13 Active Layer 3 Call(s) ) 
[9] => Array ( [item] => CCB:callid=122A, sapi=0, ces=0, B-chan=22, calltype=VOICE ) 
[10] => Array ( [item] => CCB:callid=126D, sapi=0, ces=0, B-chan=17, calltype=VOICE ) 
[11] => Array ( [item] => CCB:callid=1279, sapi=0, ces=0, B-chan=24, calltype=VOICE ) 
[12] => Array ( [item] => CCB:callid=12C5, sapi=0, ces=0, B-chan=1, calltype=VOICE ) 
[13] => Array ( [item] => CCB:callid=12D5, sapi=0, ces=0, B-chan=5, calltype=VOICE ) 
[14] => Array ( [item] => ACTIVE ) 
) 

ACTIVE の戻り値インデックスを取得するにはどうすればよいですか?

search_array($lists,'ACTIVE'); 結果は4,14です

どうもありがとう!

4

3 に答える 3

1

PHP 5.5 では、配列が連続する整数キーでインデックス付けされている限り、便利な

$indexes = array_keys(array_column($lists, 'item'), 'ACTIVE');

または、 を使用することもできますarray_walk。解決策はもう少し冗長ですが、多くの利点があります。

  • PHP >= 5.3 で動作
  • のキーに関係なく機能し$listsます
  • メモリ使用量が少ない (配列が非常に大きい場合にのみ重要)

コード:

$indexes = array();
array_walk($lists, function($i, $key) use (&$indexes) {
               if ($i['item'] == 'ACTIVE') $indexes[] = $key;
           });

実際に見てください

于 2013-09-09T09:08:55.937 に答える
1

これを試して:

$result=array();
$count=count($lists);
for($i=0;$i<$count;$i++) {
  if($lists[$i]['item']=='ACTIVE') {
    $result[]=$i;
  }
}
$result=implode(",",$result);
于 2013-09-09T09:07:24.743 に答える
0
<?
// $lists is your array

function q($item, $key) {
  if ($item == 'ACTIVE')
    echo $key.", ";
}

array_walk_recursive($lists, 'q');
?>
于 2013-09-09T09:08:13.220 に答える