2012-01-12 86 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