如何将一个数组中的值移动到另一个数组中

3

我想要将一个数组中特定键的值移动到另一个数组中,例如以下是我的第一个数组。

firstArray
(
    [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
        )

)

以下是我的第二个数组。
TwoArray
(
    [863] => Bead Headed Prince Nymphs size 18
    [861] => Bead Headed Prince Nymphs size 14
)

我希望你能够创建一个包含组合值的数组,例如:
mainarray(
     [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] =>Bead Headed Prince Nymphs size 18
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 14
        )
)

我使用了以下代码,但我没有得到我想要的输出。
$getResult = $wpdb->get_results("SELECT *FROM tablename");

if(isset($getResult) && !empty($getResult)){
    foreach($getResult as $val){

        $data = $val->fliesfromuser;

        $fliesFromStore = json_decode($val->fliesid_in_store,true);

        @$result = call_user_func_array('array_merge', $fliesFromStore);

        echo "<pre>first";
        print_r ($fliesFromStore);
        echo "</pre>";

        $postIds    = array_column($fliesFromStore, 'id');

        $args       = array(
            'post__in' =>$postIds,
            'post_type' =>'product'
        );

        $getStorePosts  = get_posts($args);
        $postTitle      = array_column($getStorePosts, 'post_title','ID');

        echo "<pre>Two";
        print_r ($postTitle);
        echo "</pre>";

        $test = array_merge($fliesFromStore,$postTitle);

        echo "<pre>";
        print_r ($test);
        echo "</pre>";
        die();
    }
}

如果有人知道我在代码中做错了什么,请帮助我。

你的第一个数组中会有重复的id吗?也就是说,同一个id会出现在多个子数组中吗? - Arun
3个回答

3
如果您将第一个数组变成关联数组,那么只需要使用一个简单的foreach循环即可。
您可以使用array_column将第一个数组变成关联数组。
// Make firstarray associative
$firstarray = array_column($firstarray, NULL,"id");

foreach($twoarray as $key => $val){
    $firstarray[$key]['name'] = $val;
}
var_dump($firstarray);

https://3v4l.org/Is3EC

请注意,firstarray是关联数组,如果需要取消关联,请使用array_values。
编辑:请记住,此代码假定第二个数组中的键存在于第一个数组中。 如果不存在,则会在第一个数组中创建一个仅包含“name”的新项目。 您可以使用isset()先确保$ key存在于firstarray中。
foreach($twoarray as $key => $val){
    if(isset($firstarray[$key])) $firstarray[$key]['name'] = $val;
}

啊!比我快了52秒!:)但这很完美,我基本上走了同样的路线:(https://eval.in/1035247),但没有想到包含关联数组函数。 - Frits
@Frits 发布它,你的可能更快。 - Andreas
@Andreas 的回答很好,但是如果 $firstarray[$key] 不存在,这将会返回错误,所以我认为你需要检查数组键是否存在。 - RainDev
@Rainmx93 这不会产生错误,但我已经将其添加到答案中。https://3v4l.org/TrU5g - Andreas
@Rainmx93 - 如果$firstarray[$key]不存在,它将简单地向数组添加一个'name => NULL'(test),这可以替换为空字符串(test),但你在发现这一点上做得很好! - Frits
@Frits 不在我的代码里。请看我在评论中发布的链接。我的代码将添加一个新项目。 - Andreas

1

以下是与@Andreas的答案略有不同的版本:

它仍然使用快速的foreach循环将正确的数组值合并在一起,只是不使用关联数组。

$fliesFromStore = array(
    array(
        'id'    => 863,
        'flag'  => 2,
        'qty'   => 2,
        'size'  => 8
        ),
    array(
        'id'     => 861,
        'flag'   => 2,
        'qty'    => 2,
        'size'   => 8
    ),
);

$postTitles = array(
    863 => 'Bead Headed Prince Nymphs size 18',
    861 => 'Bead Headed Prince Nymphs size 14'
);

foreach ($fliesFromStore as $key => $fly) {
    $fliesFromStore[$key]['name']   = $postTitles[$fly['id']];
}

var_dump($fliesFromStore);

这将输出:
Array
(
    [0] => Array
        (
            [id] => 863
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 18
        )

    [1] => Array
        (
            [id] => 861
            [flag] => 2
            [qty] => 2
            [size] => 8
            [name] => Bead Headed Prince Nymphs size 14
        )
)

这是一个运行示例:https://eval.in/1035247


1
这很可能更快,特别是如果它是一个大数组。 - Andreas

1
一个更快、稍微变化的代码如下:

<?php
$array1[] = [ 'id'=>863, 'flag'=>2, 'qty'=>2, 'size'=>8 ];
$array1[] = [ 'id'=>861, 'flag'=>2, 'qty'=>2, 'size'=>8 ];

$array2[863] = 'Bead Headed Prince Nymphs size 18';
$array2[861] = 'Bead Headed Prince Nymphs size 19';

foreach( $array1 as &$arr1 ) {
      $arr1['value']   = $array2[$arr1['id']];
}
print_r($array1);


?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接