PHP는

2011-01-02 7 views
5

내가처럼 보이는 데이터베이스에서 배열로 결과 집합을 값 ? 일반적으로 foreach 루프를 사용하여 새 배열을 다시 작성하고 배열 키가 b 인 경우 함수를 적용하지만 최선의 방법인지 확실하지 않습니다. 많은 배열 함수를 살펴 보았습니다. array_walk_recursive는 사용할 수있는 것처럼 보였습니다.하지만 원하는대로 할 수있는 행운이 없었습니다.PHP는

$arr = array(); 
foreach ($result as $key => $value) 
{ 
    foreach ($value as $key2 => $value2) 
    { 
     $arr[$key][$key2] = ($key2 == 'b' ? $this->_my_method($value2) : $value2); 
    }  
} 

내가 그 막대기 경우, 또는 더 나은 방법이 : 나는 그것을 충분히 설명하고 있지 않다 경우, 기본적으로 나는 코드가 아래처럼 할 수있을까요?

답변

3

:

을 당신이있는 경우 PHP> (anonymous functions에 대한) = 5.3.0 :

array_walk_recursive($result, function (&$item, $key) { 
    if ($key == 'b') { 
     $item = 'the key is b!'; 
    } 
}); 

그렇지 않으면 같은 :

function _my_method(&$item, $key) { 
    if ($key == 'b') { 
     $item = 'the key is b!'; 
    } 
} 
array_walk_recursive($result, '_my_method'); 
+0

감사합니다. 이미 위에서 말한 것처럼 array_walk_recursive를 시도했지만 작동하지 않았습니다. 분명히 $ item 매개 변수 앞에 앰퍼샌드를 넣는 것을 잊어 버렸습니다! 지금 일하고있어. – Joker

+0

예, 쉽게 실수합니다. 매뉴얼 인용하기 :'funcname이 배열의 실제 값으로 작동 할 필요가 있다면 funcname의 첫 번째 매개 변수를 참조로 지정하십시오. 그런 다음이 요소에 대한 변경 사항은 원래 배열 자체에서 변경됩니다. ' – thirtydot

0

테스트되지 않았지만 이것이 효과가 있다고 생각합니다.

function replace_b (&$arr) 
{ 
    foreach ($arr as $k => $v) 
    { 
     if ($k == 'b') 
     { 
      /* Do something */ 
     } 
     if (is_array($v) 
     { 
      replace_b($arr[$k]); 
     } 
    } 
} 

이 기능은 b의 키를 검사하는 배열을 통해 이동합니다. 키가 배열을 가리키면 재귀 적으로 그것을 따라 간다. array_walk_recursive 사용

+0

이것은'array_walk_recursive'가 이미 수행 한 것이 아닙니다. –

+0

@ Jacob : 나는'array_walk_recursive'의 정확한 문법에 익숙하지 않고 그것을 찾는데 신경 쓰지 않았다. 이것을 입력하는 것이 더 빠릅니다. –

0

사용 array_walk_recursive documented here

$replacer = function($x) {return "I used to be called $x";}; //put what you need here 
$replaceB = function(&$v, $k) use ($replacer) {if ($k === 'b') $v = $replacer($v);}; 

array_walk_recursive($arr, $replaceB); 

replacer 기능이 과도 할 수도 있습니다. 당신은 그것을 리터럴이나 당신이 좋아하는 것으로 바꿀 수 있습니다.

+0

왜 누군가가 답을 다운 보턴으로 결정했는지 확신 할 수 없습니다. 그러나 나는 그것을 정리하는 것이 좋습니다, 즉 열쇠는 참조로 $ v를 전달하고 시작과 끝 값을 인쇄하는 코드를 변경하는 것입니다. 물론 읽기가 더 쉽습니다 (불필요한 람다 함수 나 추가 로직을 사용하지 말라는 것). '$ k == 'b''). –