重新组织数组,将索引移动到特定位置php

时间:2017-08-01 10:41:06

标签: php arrays sorting for-loop

我有任意数量的数组都包含相同格式的数据。有两个单独的for循环,循环遍历两个单独的SQL查询结果,并将它们添加到两个单独的数组中。

一旦我掌握了两个阵列中的所有信息,我就会遍历它们并将它们连接在一起以形成更长的阵列。

但是,当我将此数组写入csv文件时,信息需要在数组中按顺序排列,以便将其写入csv文件。我怎么能这样做?

数组1

let(:endpoint) { FactoryGirl.create(:website) }
let(:job) { FactoryGirl.create(:job) }

subject do
  get :index, params: { format: :json, 
                       name: endpoint.name }
end

expect(subject.body).to include(:job)

数组2

[1] => Array
        (
            [0] => 2017-07-21 00:00:00
            [1] => Foo
            [2] => Bar
            [3] => 32.63
            [4] => 18.36
            [5] => 98.46
        )

    [2] => Array
        (
            [0] => 2017-07-21 00:00:00
            [1] => Foo
            [2] => Bar
            [3] => 29.74
            [4] => 148.68
            [5] => 178.42
        )

     //etc

将阵列加入

[1] => Array
        (
            [0] => RTGH707321222
            [1] => THIS
            [2] => IS
            [3] => TEXT
        )

    [2] => Array
        (
            [0] => RTGH707321220
            [1] => SOME
            [2] => WORDS
            [3] => HERE
        )

    //etc

数组后合并 - print_r($ array1)

array_walk($array2, function($values, $key) use (&$array1) {

        $array1[$key] = array_merge($array1[$key], $values);
    } );

所以这个工作正常。但是,我想移动一些这些索引,以便它们处于不同的顺序。我查看了array_splice()但我不确定这是否是正确的使用方法。

我希望它看起来像什么

[1] => Array
        (
            [0] => 2017-07-21 00:00:00
            [1] => Foo
            [2] => Bar
            [3] => 32.63
            [4] => 18.36
            [5] => 98.46
            [6] => RTGH707321222
            [7] => THIS
            [8] => IS
            [9] => TEXT
        )

    [2] => Array
        (
            [0] => 2017-07-21 00:00:00
            [1] => Foo
            [2] => Bar
            [3] => 29.74
            [4] => 148.68
            [5] => 178.42
            [6] => RTGH707321220
            [7] => SOME
            [8] => WORDS
            [9] => HERE
        )

     //etc

如您所见,所有信息仍然相同。这些值刚刚被移动到不同的索引。如何对数组进行排序,使其看起来如上所示。谁能指出我正确的方向?感谢。

2 个答案:

答案 0 :(得分:1)

我们可以在这里使用swap技术,

<?php
    foreach ($arr as $key => $value) {
        $swap = $value[1];
        $arr[$key][1] = $value[6];
        $arr[$key][6] = $swap;
        $swap = $value[9];
        $arr[$key][9] = $value[2];
        $arr[$key][2] = $swap;
        $swap = $value[7];
        $arr[$key][7] = $value[3];
        $arr[$key][3] = $swap;
    }
    print_r($arr);
?>

$arr是你的数组。

答案 1 :(得分:1)

这是一个使用array_replace()和排序数组的简单方法。

没有额外的循环,没有临时交换变量。

代码:(Demo

$array1=[
    1=>['2017-07-21 00:00:00','Foo','Bar',32.63,18.36,98.46],
    2=>['2017-07-21 00:00:00','Foo','Bar',29.74,148.68,178.42]
];
$array2=[
    1=>['RTGH707321222','THIS','IS','TEXT'],
    2=>['RTGH707321220','SOME','WORDS','HERE']
];
$order=[0=>'',6=>'',9=>'',7=>'',4=>'',5=>'',1=>'',3=>'',8=>'',2=>''];
array_walk($array2, function($values, $key) use (&$array1,$order) {
    $array1[$key] = array_replace($order,array_merge($array1[$key], $values));
});
var_export($array1);