dongwuwu6104 2017-02-17 10:44
浏览 100

弹出并从一个关联数组推送到另一个数组

I want to pop from array2 and want to push in array1. But according to some custom requirement.

Now in array1 there is 1st key's readingOrder is 1 and 2nd key's readingOrder is 4.

So i want to push between this two key from array2's first two key.And same process for all other.

and my final array must be like array3.

for example in array1 key[0] readingOrder is 1 and key[1]'s 4. Now i want to push another two key from array2. for array1 key[2] reading order is 6. so before this key i want to push another one key from array2 and same for further...

array1 is like below

Array
(
    [0] => Array
        (
            [readingOrder] => 1
            [id] => 78
        )

    [1] => Array
        (
            [readingOrder] => 4
            [id] => 76
        )

    [2] => Array
        (
            [readingOrder] => 6
            [id] => 80
        )

)

array2 is like below

Array
(
    [0] => Array
        (
            [id] => 81
            [readingOrder] => 2
        )

    [1] => Array
        (
            [id] => 82
            [readingOrder] => 5
        )

    [2] => Array
        (
            [id] => 84
            [readingOrder] => 7
        )

    [3] => Array
        (
            [id] => 85
            [readingOrder] => 8
        )

    [4] => Array
        (
            [id] => 86
            [readingOrder] => 9
        )

    [5] => Array
        (
            [id] => 87
            [readingOrder] => 10
        )

    [6] => Array
        (
            [id] => 88
            [readingOrder] => 11
        )

)

Output array3:

Array
(
    [0] => Array
        (
            [readingOrder] => 1
            [id] => 78
        )

    [1] => Array
        (
            [id] => 81
            [readingOrder] => 2
        )

    [2] => Array
        (
            [id] => 82
            [readingOrder] => 5
        )

    [3] => Array
        (
            [readingOrder] => 4
            [id] => 76
        )

    [4] => Array
        (
            [id] => 84
            [readingOrder] => 7
        )

    [5] => Array
        (
            [readingOrder] => 6
            [id] => 80
        )

    [6] => Array
        (
            [id] => 85
            [readingOrder] => 8
        )

    [7] => Array
        (
            [id] => 86
            [readingOrder] => 9
        )

    [8] => Array
        (
            [id] => 87
            [readingOrder] => 10
        )

    [9] => Array
        (
            [id] => 88
            [readingOrder] => 11
        )

)

Thanks..

  • 写回答

2条回答 默认 最新

  • dqmfo84644 2017-02-17 11:04
    关注

    You can do this with usort. First you need to merge the arrays:

    $a1 = [
        [
            'readingOrder' => 1,
            'id' => 78
        ],
        [
            'readingOrder' => 4,
             'id' => 76
        ],
        [
            'readingOrder' => 6,
            'id' => 80
        ]
    ];
    $a2 = [
        [
            'readingOrder' => 2,
            'id' => 81
        ],
        [
            'readingOrder' => 5,
            'id' => 82
        ],
        [
            'readingOrder' => 7,
            'id' => 84
        ],
        [
            'readingOrder' => 8,
            'id' => 85
        ]
    ];
    
    $a3 = array_merge($a1, $a2);
    

    Then you need to use usort:

    usort($a3, function($a,$b) {
        if ($a['readingOrder'] == $b['readingOrder']) return 0;
        return $a['readingOrder'] < $b['readingOrder'] ? -1 : 1;
    });
    

    In PHP 7 you can now use the spaceship operator, which would make the code more clean. Like so:

    usort($a3, function($a,$b) {
        return $a[0] <=> $b[0];
    });
    

    This will then return:

    (
        [0] => Array
            (
                [readingOrder] => 1
                [id] => 78
            )
    
        [1] => Array
            (
                [readingOrder] => 2
                [id] => 81
            )
    
        [2] => Array
            (
                [readingOrder] => 4
                [id] => 76
            )
    
        [3] => Array
            (
                [readingOrder] => 5
                [id] => 82
            )
    
        [4] => Array
            (
                [readingOrder] => 6
                [id] => 80
            )
    
        [5] => Array
            (
                [readingOrder] => 7
                [id] => 84
            )
    
        [6] => Array
            (
                [readingOrder] => 8
                [id] => 85
            )
    
    )
    
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100