2014-09-26 70 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'); 

編輯:是工作,但不知何故,我不明白這一點的工作,我想翻譯WordPress子菜單詞。

+1

'array_walk_recursive' ...?! – deceze 2014-09-26 13:32:46

+0

array_walk_recursive對我而言是新的 – 2014-09-26 13:35:07

+0

http://php.net/array_walk_recursive – deceze 2014-09-26 13:35:44

回答

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