0

두 배열이 있는데, 배열로 구성됩니다. 이러한 배열을 재귀 적으로 병합해야합니다. 하지만 난 이미 대상 배열에 존재하는 어떤 요소를 제거하려면, 고급 서식 값 배열 해제 PHP

array_merge_recursive()

두 번 내 데이터를 apend 것이 작업을 몇 번 할 필요가 있고,

. 내가 재귀 병합이 배열에 같은 값을 추가 실행할 때 다음

foreach ($messages as $domain => $messagesArray) { 
      foreach ($allCat as $d => $mess) { 
       if ($domain == $d) { 
        foreach ($messagesArray as $ymlkey => $trans) { 
         foreach ($mess as $ymlk => $transl) { 
          if ($ymlkey == $ymlk) { 
           unset($mess[$ymlk]); 
          } 
         } 
        } 
       } 
      } 
     } 

: $ 메시지 배열 :

array(2) { 
    ["messages"]=> 
     array(2) { 
      ["test.testik"]=> 
      string(13) "Це тест" 
      ["test2313.tes31231tik"]=> 
      string(23) "це тестончик" 
     } 
    ["validators"]=> 
     array(4) { 
      ["valid.validik"]=> 
      string(36) "Це валідне значення" 
      ["joga.jimbo"]=> 
      string(27) "Джімбо торбінс" 
      ["validka.invalidka"]=> 
      string(23) "це інвалідка" 
      ["smith.john"]=> 
      string(17) "джон сміт" 
    } 
} 

$ allCar 배열 :

array(2) { 
     ["messages"]=> 
      array(1) { 
      ["test2313.tes31231tik"]=> 
      string(23) "це тестончик" 
      } 
     ["validators"]=> 
      array(2) { 
       ["validka.invalidka"]=> 
       string(23) "це інвалідка" 
       ["smith.john"]=> 
       string(17) "джон сміт" 
     } 
     } 

나는 몇 가지 코드를 썼다. 내가 뭘 잘못하고 있니?

+2

시작 배열과 예상 결과를 제공해야합니다. – AbraCadaver

+0

@AbraCadaver, 내가 알아야 할 배열을 추가했습니다. – nowiko

답변

2

이 :

 foreach ($allCat as $d => $mess) { 

$ 엉망이 당신의 foreach() 루프가 현재 작동하고 어떤 값의 임시 COPY입니다. 나중에 unset($mess...)을 수행하면 임시 복사본을 간단히 설정 해제하는 것입니다.

일부 사용자는 $mess을 참조 할 것을 제안 할 수도 있지만 나중에 문제가 발생할 수 있습니다. $ mess은 루프가 끝난 후에도 참조가되므로 나중에 변수를 다시 사용하면 $ 엉망이됩니다. 마지막으로 루프에서 지적했다.

unset($messages[$domain][$d][$ymlkey][$ymkl]) 

또는 그것이 있어야 무엇이든 :

대신, 설정되지 않은 통화의 전체 배열/개체 경로 참조를 사용합니다. 이렇게하면 실제 "실제"배열로 작업하는 것이고, 중첩 루프가 만드는 많은 임시 복사본이 아닌 것을 보장 할 수 있습니다.

+0

진지한 질문 : 만약 당신이 'unset ($ mess);'하면 루프가 완료된 후에 (심지어 참조로) 사용이 허용되지 않을까요? 그게'unset()'의 핵심이 아닌가? – Kirkland

+0

예, 루프 뒤에서 $ mess을 직접 해제 할 수는 있지만, op 코드는 그 일을하지 않습니다. –

+0

아, 알겠습니다. 'unset ($ mess) '이 아니라'unset ($ mess ['var '])'이 아니라는 것을 완전히 놓쳤다. 죄송합니다. – Kirkland