2014-09-26 1 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

+0

array_walk_recursive 새로와주세요 –

+0

http://php.net/array_walk_recursive – deceze

답변

2

의견에 제안 된대로 array_walk_recursive을 사용하고 원본 배열을 참조로 전달하여 편집 할 수 있습니다.

https://eval.in/198978

<?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); 

그래서, 지금 우리는 기본적인 논리를 가지고,의는 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

관련 문제