Поиск подстроки внутри массива в php - PullRequest
0 голосов
/ 11 февраля 2011

Привет, я хотел бы знать, есть ли хороший алгоритм для поиска подстроки внутри массива, который находится внутри другого массива,

У меня есть что-то вроде:

Array (

        [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], но это не всегда одно и то же

Что яя делаю сейчас некоторое время внутри другого и проверяю strpos для подстроки, но, может быть, есть лучший способ сделать это, какие-либо предложения?

Спасибо за все


Обновленный код:

$ i = -1;

foreach ($ img as $ outterKey => $ outter) {

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

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

Ответы [ 2 ]

0 голосов
/ 02 сентября 2014

попробуйте этот код, здесь вы получите полное расположение вашей строки.здесь $ 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];
0 голосов
/ 11 февраля 2011

Хм, может быть, как:

      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;
    }
}
...