2012-01-12 95 views
0

我有像页面下面的数组。我想找到[itag] => 22的数组编号。 在这个例子中,这是[1],是指:在php中搜索数组?

[1] => Array 
     (
      [url] => asd2 
      [quality] => hd720 
      [fallback_host] => ax2 
      [type] => video/mp4; codecs=\"avc1.64001F, mp4a.40.2\" 
      [itag] => 22 
     ) 

如何能找到这在这些阵列结构:?

Array 
(
    [0] => Array 
     (
      [url] => asd1 
      [quality] => hd720 
      [fallback_host] => ax1 
      [type] => video/webm; codecs=\"vp8.0, vorbis\" 
      [itag] => 45 
     ) 

    [1] => Array 
     (
      [url] => asd2 
      [quality] => hd720 
      [fallback_host] => ax2 
      [type] => video/mp4; codecs=\"avc1.64001F, mp4a.40.2\" 
      [itag] => 22 
     ) 

    [2] => Array 
     (
      [url] => asd3 
      [quality] => large 
      [fallback_host] => ax3 
      [type] => video/webm; codecs=\"vp8.0, vorbis\" 
      [itag] => 44 
     ) 

    [3] => Array 
     (
      [url] => asd4 
      [quality] => large 
      [fallback_host] => ax4 
      [type] => video/x-flv 
      [itag] => 35 
     ) 



) 

回答

1

和低技术含量的解决方案,没有任何花哨:

$matchKey = null; 
foreach($array as $key => $item) { 
    if ($item['itag'] == 22) { 
     $matchKey = $key; 
     break; 
    } 
} 

if($matchKey === null) { 
    echo 'Not found.'; 
} 
else { 
    echo 'Key found: '.$matchKey; 
} 
+0

它的工作原理,谢谢。 – BerkErarslan 2012-01-12 00:43:16

+0

PHP <5.3就像IE =(如果你支持它,你会阻止互联网。 – Rudie 2012-01-12 11:05:33

0

array_filter:http://php.net/manual/en/function.array-filter.php

<?php 
$matches = array_filter($arr, function($el) { 
    return $el['itag'] == 22; 
}); 
print_r($matches); 
// or 
$key = key($matches); 
?> 

如果22是一个变量,你必须导入/使用它进入封闭的范围:

... 
$matches = array_filter($arr, function($el) use ($someVar) { 
    return $el['itag'] == $someVar; 
... 
+0

有语法错误,我不明白$ el函数,你没有调用它,或者你? – BerkErarslan 2012-01-12 00:24:46

+0

@BerkErarslan如果您使用的是旧版(5.3版之前的)PHP版本,那么会在匿名函数上产生语法错误。升级时间:)或者将函数作为命名函数输出,并将其名称命名为array_filter。 – StasM 2012-01-12 00:39:48