2011-02-11 71 views
0

嗨數組裏面,我想知道是否有一個好的算法來搜索一個數組,它是另一個數組內內子的,搜索子串在PHP

我有類似:

陣列(

 [0] => Array(
        [0] => img src="1" /> 
        [1] => img src="2" alt="" class="logo i-dd-logo" /> 
        [2] => img src="3" alt="" /> 
        [3] => img src="4" width="21" height="21" alt="" class="i-twitter-xs" /> 
        [4] => img src="myTarget" width="21" height="21" alt="" class="i-rss" /> 
        [5] => <img class="offerimage" id="product-image" src="6" title="" alt=""/> 
        [6] => <img class="offerimage" id="product-image" src="7" title="" alt=""/> 
        [7] => <img class="offerimage" id="product-image" src="8" title="" alt=""/> 
        [8] => <img src="9" width="16" height="16" /> 
    ) 

[1] => Array(
        [0] => src="1" 
        [1] => src="a" alt="" class="logo i-dd-logo" 
        [2] => src="b" alt="" 
    ) 

我想要做的是要知道目標的位置,例如[0] [4],但它並不總是相同

我現在正在做的是在另外一段時間內檢查whith strpos的子字符串,但也許有更好的方法來做到這一點,有什麼建議嗎?

感謝一切


更新代碼:

$ I = -1;

的foreach($ IMG爲$ outterKey => $ outter){

  foreach($outter as $innerKey=>$inner){ 

     $pos = strpos($img[$outterKey][$innerKey],"myTarget"); 
     if (!$pos === false) { 
        $i=$outterKey;$j=$innerKey; 
        break 2; 
       } 
      } 
    } 
+0

不......你的解決方案聽起來合理,如果你知道它總是2層深。 – mpen 2011-02-11 07:48:12

+0

問題是,現在它只有2層深,但我想在可能性思考這個:( – Saikios 2011-02-11 07:51:14

回答

0

嗯,也許像:

 foreach($outsideArray as $outterKey=>$outter) { 
       foreach($outter as $innerKey=>$inner){ 
        if(substr_count ($inner , $needle)) { 
         echo $outterKey . " and " . $innerKey; 
        } 
       } 
     } 

編輯:可擴展的,我在你的評論注意到你想要它可擴展性。遞歸如何?

function arraySearch($array) { 
    foreach($array as $key=>$item){ 
     if(is_array($item) 
      return arraySearch($item); 
     elseif(substr_count ($item , $needle) 
      return $key; 
    } 
} 
0

試試這個代碼在這裏你得到了你的字符串的完整位置。 這裏$ find是你的子串。 $ data是你的數組。

$find = "<img src='4' width='21' height='21' alt=' class='i-twitter-xs' />"; 
foreach ($data as $out_key => $out_value) 
{ 
    if(is_array($out_value)) 
    { 
    if(in_array($find, $out_value)) 
    { 
     $out_pos = array_search($out_value, $data); 
     $inn_pos =array_search($find, $out_value); 
    } 
    } 
} 
echo $data[$out_pos][$inn_pos];