2014-10-05 5 views
1

나는 지금 나의 뇌를 3 시간 동안 꼼짝 못하게하고있다. 두 개의 배열, $ authors 및 $ books 있습니다.인덱싱 된 배열을 정렬되지 않은 연관 배열에 병합하는 방법 PHP

$ 저자 :

$authors = array("Steinbeck", "Kafka", "Tolkien", "Dickens", "Milton", "Orwell"); 

$ 책 : 당신이 볼 수 있듯이

$books = array(
      array(
       "title" => "The Hobbit", 
       "authorId" => 2, 
       "pubYear" => 1937 
       ), 
      array(
       "title" => "The Grapes of Wrath", 
       "authorId" => 0, 
       "pubYear" => 1939 
       ), 
      array(
       "title" => "A Tale of Two Cities", 
       "authorId" => 3, 
       "pubYear" => 1859 
       ), 
      array(
       "title" => "Paradise Lost", 
       "authorId" => 4, 
       "pubYear" => 1667 
       ), 
      array(
       "title" => "Animal Farm", 
       "authorId" => 5, 
       "pubYear" => 1945 
       ), 
      array(
       "title" => "The Trial", 
       "authorId" => 1, 
       "pubYear" => 1925 
       ), 
     ); 

, $ 저자는 2 차원 인덱스 배열 $ 반면 책은 다차원 연관 배열이다. 내 임무는 "authorName"이라고 불리는 $ books에 대한 새로운 키를 만드는 것이다 (배열에 대한 어휘도 나를 망쳐 버렸다.) $ authors 배열의 저자들과 키를 채운다. catch는 $ authors 배열에있는 저자의 색인이 $ books 배열의 "authorId"에 해당하지만 ID의 순서가 잘못되었습니다. 그래서

$books = array(
      array(
       "title" => "The Hobbit", 
       "authorId" => 2, 
       "pubYear" => 1937 
       "authorName" => "Tolkien" 
       ), 
      array(
       "title" => "The Grapes of Wrath", 
       "authorId" => 0, 
       "pubYear" => 1939 
       "authorName" => "Steinbeck" 
       ), 
      array(
       "title" => "A Tale of Two Cities", 
       "authorId" => 3, 
       "pubYear" => 1859 
       "authorName" => "Dickens" 
       ), 

을 ... 그리고 :

즉, 내 작업은 책 배열이 다음과 같은 데이터로 끝나는 있도록 $ 저자 배열에서 데이터를 가져 오는 것입니다. 내가 어떻게하는지 전혀 모르기 때문에 어떤 도움이라도 인정 될 것이다.

답변

1

다음 스 니펫이 트릭을 수행해야합니다. 북 배열을 반복하고 authorName을 반복 책의 authorId에 해당하는 값으로 설정합니다.

foreach($books as $key => $book) { 
    $books[$key]['authorName'] = $authors[$book['authorId']]; 
} 
1

PHP 학습에 대한 축하합니다! 어휘와 같은 사소한 것들부터 시작하겠습니다. 나는 그것을 얻기 위해 프로그램에서 중요하다고 생각 못했습니다 ;-)

  1. $authors 배열 당신은 그것을 순서가 말했다
  2. 두 개의 차원이 아니라 내가 생각하지 않습니다. 배열 인덱스는 0을 기준으로합니다.
  3. 예, "키"는 추가하려는 내용을 설명하는 괜찮은 방법입니다. 좀 더 의미 론적으로 적절한 "엔트리"는 "키"와 "값"으로 구성됩니다.

다음은 몇 가지 코드입니다. 나는 어떤 일이 일어나고 있는지 명확히하기 위해 보통 코드를 작성하는 것보다 약간 더 장황하게 선택했다.

foreach($books as $book_index => $book_array) { 
    // Get the index of the author in the $authors array. 
    // With this value, $authors[$authorId] will be the name of the author of this book 
    $authorId = intval($book_array['authorId']); 

    // this line adds an entry to the current book in the $books array. 
    $books[$book_index]['authorName'] = $authors[$authorId]; 
} 
+0

+1 그냥 대답하는 대신 실제로 가르치기. – webnoob

+0

위대한 설명과 수정을 해주셔서 감사합니다. 코드는 정확히 작동해야하며 주석을 통해 어떻게 작동하는지 확인할 수 있습니다. 매우 감사! – user3530169

+0

@webnoob 응답은 가르치고 있습니다, 그는 단지 정교합니다. –

1

$books에서 루프를 실행하면됩니다.

foreach($books as $index => $book){ 
    $books[$index]['authorName'] = $authors[$book['authorId']]; 
} 
관련 문제