2016-07-10 8 views
-4

私は3つの配列を持っています。これらは相互に関連しています。私はこれらのステートメントを組み合わせたい。php、3つの配列を1つの配列にマージする代替

<?php 

$post = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1' 
    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2' 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3' 
    ), 
); 


$user = array( 
    array (
     'id' => 1, 
     'name' => 'Mark' 
    ), 
    array (
     'id' => 2, 
     'name' => 'Selena' 
    ) 
); 

$post_user = array( 
    array (
     'id'  => 1, 
     'post_id' => 1, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 2, 
     'post_id' => 2, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 3, 
     'post_id' => 3, 
     'user_id' => 2 
    ), 
); 


$merge = array(); 
foreach($posts_user as $data){  
    foreach ($posts as $post){ 
     if($data['post_id'] == $post['id']){ 
      foreach ($users as $user){ 
       if($data['user_id'] == $user['id']){ 
       $post['user'] = $user; 
       $merge['post'][] = $post; 
       } 
      } 
     } 
    }  
} 

print_r($merge); 

私は次のようになりたいです。どうしたらいいですか? 結果が必要です。

$merge = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1', 
     'user' => array (
         'id' => '1', 
         'name' => 'Mark' 
        ), 

    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2', 
     'user' => array (
         'id' => '1', 
         'name' => 'Mark' 
        ), 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3', 
     'user' => array (
         'id' => '2', 
         'name' => 'Selena' 
        ), 
    ), 
); 

別の方法がありますか?例えば;私はそれらとどうやりますか?私が実行しようとしました

array_walk_recursive()、ArrayIterator()、RecursiveArrayIterator()

+1

が鳴ります。 – chris85

+0

ちょうどちょうどちょうど言ったように、PHPの側でこれを行うのではなく、適切なSQL文を使用する – Ghost

+0

私はSQLでやっている、私は配列を作るist – Scaffold

答えて

0

。それが結合して1であるべきときに3つのクエリを使用しているよう

<?php  
$post = array( 
    array (
     'id'  => 1, 
     'title' => 'Title 1', 
     'content' => 'Content 1' 
    ), 
    array (
     'id'  => 2, 
     'title' => 'Title 2', 
     'content' => 'Content 2' 
    ), 
    array (
     'id'  => 3, 
     'title' => 'Title 3', 
     'content' => 'Content 3' 
    ), 
); 


$user = array( 
    array (
     'id' => 1, 
     'name' => 'Mark' 
    ), 
    array (
     'id' => 2, 
     'name' => 'Selena' 
    ) 
); 

$post_user = array( 
    array (
     'id'  => 1, 
     'post_id' => 1, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 2, 
     'post_id' => 2, 
     'user_id' => 1 
    ), 
    array (
     'id'  => 3, 
     'post_id' => 3, 
     'user_id' => 2 
    ), 
); 

$newuser = array(); 
foreach($post_user as $data){ 
    foreach ($user as $users){ 
     if($data['user_id'] == $users['id']){ 
     $newuser[] = $users; 
     } 
    } 
} 



$mi = new MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC); 
$mi->attachIterator(new ArrayIterator($post),1); 
$mi->attachIterator(new ArrayIterator($newuser),'user'); 

$newArray = array(); 
foreach($mi as $details) { 
    $newArray[] = $details; 
} 
print_r($newArray); 

結果

Array 
(
    [0] => Array 
     (
      [1] => Array 
       (
        [id] => 1 
        [title] => Title 1 
        [content] => Content 1 
       ) 

      [user] => Array 
       (
        [id] => 1 
        [name] => Mark 
       ) 

     ) 

    [1] => Array 
     (
      [1] => Array 
       (
        [id] => 2 
        [title] => Title 2 
        [content] => Content 2 
       ) 

      [user] => Array 
       (
        [id] => 1 
        [name] => Mark 
       ) 

     ) 

    [2] => Array 
     (
      [1] => Array 
       (
        [id] => 3 
        [title] => Title 3 
        [content] => Content 3 
       ) 

      [user] => Array 
       (
        [id] => 2 
        [name] => Selena 
       ) 

     ) 

) 
関連する問題