2014-09-26 2 views
0

Как заменить строку/слово внутри многомерного массива на новое значение? У меня нет его ключа, просто знайте стог сена и иглу.Как заменить строку внутри многомерного массива?

Скажем, у меня многомерный массив, $submenu_arr, (не знаю, сколько измерений).

Я хочу найти значение внутри одного из этих массивов и заменить его новым значением.

На самом деле для перевода.

Как:

recursive_arr_translation('Article', $submenu_arr, 'Artigo');//"Artigo" is a Portuguese word for "Article". 

Я попытался это, но не работает:

function in_array_r($needle, $haystack, $new_value) { 
     $found = false; 
     foreach ($haystack as $key=>$value) { 
     if ($value === $needle) { 
       $found = true; 
       $haystack[$key] = $new_value; 
       return true; 
      } elseif (is_array($value)) { 
       $found = in_array_r($needle, $haystack[$key], $new_value); 
       if($found) { 
        return true; 
       } 
      }  
     } 
     return $found; 
    } 


in_array_r('Article', $submenu, 'Artigo'); 
in_array_r('Location', $submenu, 'Localização'); 

EDIT: Это работает, но как-то, что я не получаю это работает, я стараюсь для перевода слова подменю WordPress.

+1

'array_walk_recursive' ...?! – deceze

+0

array_walk_recursive new для меня –

+0

http://php.net/array_walk_recursive – deceze

ответ

2

Вы можете использовать array_walk_recursive, как предложено в комментариях, и передать исходный массив в качестве справочного материала, что позволит нам его отредактировать.

<?php 

$a = array("Giraffe", "Monkey", "Elephant", "Snake", 5, "other" => array("apple", "orange")); 

array_walk_recursive($a, function(&$a) { 
     if($a == "apple") { 
      $a = "Banana"; 
     } 
}); 

echo print_r($a, true); 

https://eval.in/198978

Итак, теперь у нас есть основные логики, давайте создадим функцию с 3 параметрами.

function replace_in_array($find, $replace, &$array) { 
    array_walk_recursive($array, function(&$array) use($find, $replace) { 
     if($array == $find) { 
      $array= $replace; 
     } 
    }); 
    return $array; 
} 

$a = array("Giraffe", "Monkey", "Elephant", "Snake", 5, "other" => array("apple", "orange")); 
echo print_r(replace_in_array("apple", "banana", $a), true); 

https://eval.in/198989

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