php,3个数组到一个数组合并替代

时间:2016-07-10 22:43:01

标签: php arrays recursion relation

我有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
      ),
);


$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 个答案:

答案 0 :(得分:0)

我试过。

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

        )

)