根据数组键顺序

时间:2018-07-27 20:44:39

标签: php arrays sorting multidimensional-array

我将网格导出到xls,我有一个数组$ data,它在一个数字数组中保存信息,例如:

数组

    [0] =>数组
         (
             [Field1] =>“值”
             [Field2] =>“不同的值”
             [Field3] =>“另一种情况”
        )


其中[0]是网格的第一行(并且网格最多可包含1万行或3条线)

但是用户可以更改字段的顺序或添加更多字段(甚至将其隐藏在网格中),因此我还有另一个数组,可以精确地显示哪些字段可见,其当前顺序为“ $ currentOrder”(这两个数组-$ data和$ currentOrder内部的数字-具有相同的键名和数量)。

我一直很难进入数字数组并像$ currentOrder一样对它的字段进行排序(并将值更改为正确的字段)

如果我的$ currentOrder是
Array

             [Field3] =>“”
             [Field1] =>“”
             [Field2] =>“”


我的$ data输出必须是
数组

    [0] =>数组
         (
             [Field3] =>“另一个值”
             [Field1] =>“值”
             [Field2] =>“不同的值”
        )


2 个答案:

答案 0 :(得分:0)

这应该做您想要的。它使用array_map根据$data中的键顺序对$current_order的每个元素重新排序。

$data = array(array('Field1'=>'Value',
                    'Field2'=>'Different value',
                    'Field3'=>'Another value')
              );
$currentOrder = array('Field3'=>'',
                      'Field1'=>'',
                      'Field2'=>'');

$output = array_map(function ($arr) use ($currentOrder) {
    $newarr = array();
    foreach (array_keys($currentOrder) as $key)
        $newarr[$key] = $arr[$key];
    return $newarr;
}, $data);

print_r($output);

输出:

Array
(
    [0] => Array
        (
            [Field3] => Another value
            [Field1] => Value
            [Field2] => Different value
        )

)

答案 1 :(得分:0)

像它一样使用:-

foreach($urarr as $key => $val){
    ksort($urarr[$key], SORT_NUMERIC);
}