【问题标题】:Reorganise array, move indexes to specific locations php重组数组,将索引移动到特定位置php
【发布时间】:2017-08-01 10:41:06
【问题描述】:

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

一旦我获得了两个数组中的所有信息,我将遍历它们并将它们连接在一起以形成一个更长的数组。

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

数组 1

[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

数组 2

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

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

    //etc

将数组连接在一起

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

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

数组合并后 - print_r($array1)

[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

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

我想要的样子

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

        //etc

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

【问题讨论】:

  • 你应用什么逻辑来改变你的索引
  • 我还没有改变任何东西。这就是我需要帮助的原因

标签: php arrays sorting for-loop


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

【讨论】:

  • 它在第 170 行显示意外 [ $order=[0=>'',6=>'',9=>'',7=>'',4=>'',5 =>'',1=>'',3=>'',8=>'',2=>''];
  • @IbrahimHafiji 你在使用 PHP >= 5.4 吗?如果不只是替换为$order=array(0=>'',6=>'',9=>'',7=>'',4=>'',5=>'',1=>'',3=>'',8=>'‌​',2=>'');
  • 是的,我刚刚意识到哈哈。谢谢
【解决方案2】:

我们可以在这里使用交换技术,例如,

<?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 是你的数组。

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多