【问题标题】:How to move array values from one array to another如何将数组值从一个数组移动到另一个数组
【发布时间】:2018-12-20 05:23:37
【问题描述】:

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

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?

标签: php arrays wordpress


【解决方案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);


?>

【讨论】:

    【解决方案2】:

    如果您将第一个数组设为关联数组,则需要一个简单的 foreach 循环。
    您可以使用 array_column 使 firstarray 关联。

    // 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 删除关联。

    编辑:请记住,此代码假定第二个数组中的键存在于第一个数组中。
    如果它不存在,它将在第一个数组中创建一个只有“名称”的新项目。
    您可以使用 isset() 首先确保 $key 存在于 firstarray 中。

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

    【讨论】:

    • 啊!比我快52秒! :) 但这是完美的,我遵循了几乎相同的路线:(eval.in/1035247),但没想到包含关联数组函数。
    • @Frits 发布,你的可能更快
    • @Andreas 很好的答案,但是如果$firstarray[$key] 不存在这将返回错误,所以我认为你需要检查数组键是否存在
    • @Rainmx93 它不会产生错误,但我已将其添加到答案中。 3v4l.org/TrU5g
    • @Rainmx93 - 如果 $firstarray[$key] 不存在,它会简单地添加一个 'name => NULL` 到数组 (test),它(如果你愿意的话)可以被关闭对于一个空白字符串 (test),但是把它捡起来做得很好!
    【解决方案3】:

    与@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

    【讨论】:

    • 这很可能更快,特别是如果它是一个大数组。
    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多