2016-05-06 1 views
0

мне нужно, чтобы соответствовать все «ключевые слова» в multidimesional массиве:рекурсивный множественный матч в массиве многомерный PHP

$array = array(
    'green' => 'keyword', 
    'orange', 
    'keyword', 
    'black' => array(
     'purple' => 'text', 
     'brown', 
     'pink' => 'keyword' 
    ), 
    'white' => array(
     'red', 
     'yellow' => 'keyword', 
     'blue' 
    ), 
    'violet', 
    'gray' 
); 

Тогда я хотел бы получить доступ к результатам матча, как:

$matches[0][0] 
$matches[2] 
$matches[3][2] 
.... 

Что должен Я использую? Я попытался с array_filter, но не работает .. и это, возможно, придется быть рекурсивными

function findInArray($array){ 
    $array = array_filter($array, function($array){ 
     return ($array == 'keyword'); 
    }); 
    return $array; 
} 
+0

Вы должны добавить код, в котором вы используете его тоже добавить использование с входного массива – Ghost

ответ

1

Вы можете сделали вещь с помощью array_filter.

Онлайн регистрация 3v4l.org

$arr = array(); 

$str = 'keyword'; 
$arr[] = array_filter($array, function($var) use ($str) { 
      global $arr; 
      if(is_array($var)){    
       $arr[] = array_filter($var, function($var2) use ($str) { 
        return preg_match("/$str/i", $var2); 
       }); 
      }else{ 
       return preg_match("/$str/i", $var); 
      }   
     }); 

function getL2Keys($array){ 
    $result = array(); 
    foreach($array as $sub) { 
     $result = array_merge($result, $sub); 
    }   
    return $result; 
} 

$arr = getL2Keys($arr); 

Результат:

Array 
(
    [pink] => keyword 
    [yellow] => keyword 
    [green] => keyword 
    [0] => keyword 
) 
+0

вы можете добавить пример $ массива? Он не работает с моим массивом – neoDev

+0

, поэтому, пожалуйста, разместите свой массив. –

+0

проверить: [3v4l.org] (https://3v4l.org/M3iTi) –

Смежные вопросы