【问题标题】:Moving around key order in a multi-dimensional array在多维数组中移动键顺序
【发布时间】:2009-06-22 20:12:59
【问题描述】:

如何“重新排序”多数组中的键?例如,我有:

$arr["abc"][0] = "val1";
$arr["abc"][1] = "val2";
$arr["abc"][2] = "val3";
$arr["xyz"][0] = "val4";
$arr["xyz"][1] = "val5";
$arr["xyz"][2] = "val6";

我希望它是:

$arr[0]["abc"] = "val1";
$arr[0]["xyz"] = "val4";
$arr[1]["abc"] = "val2";
$arr[1]["xyz"] = "val5";
$arr[2]["abc"] = "val3";
$arr[2]["xyz"] = "val6";

我目前的努力是:

foreach ($arr as $param => $num) foreach ($num as $val) $newArr[$num][$param] = $val;

但它似乎不起作用。 任何帮助将不胜感激。

编辑: 具体来说,我正在尝试遍历在$_FILES 上提交的所有元素,因为它们都需要对它们执行相同的操作。默认情况下,当一个表单中有多个<input type="file" name="filedata[]" /> 时,它们会转到$_FILES["filedata"]["name"][$index]。 ("name" 或任何其他参数),所以我不能只遍历每个$_FILES["filedata"] 来获取所有内容;因此,我需要将$_FILES["filedata"] 的键反转。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    我认为您仍然需要在第二个 foreach 中抓住钥匙。尝试类似:

    foreach($arr as $k1 => $v1) {
      foreach ($v1 as $k2 => $v2) {
        $newArray[$k2][$k1] = $v2
      }
    }
    

    【讨论】:

    • 哎呀,我是个白痴。我完全没有看他想要的结果数组。
    【解决方案2】:

    两个foreach 循环足够简单:

    // Original version:
    $arr = array();
    $arr["abc"][0] = "val1";
    $arr["abc"][1] = "val2";
    $arr["abc"][2] = "val3";
    $arr["xyz"][0] = "val4";
    $arr["xyz"][1] = "val5";
    $arr["xyz"][2] = "val6";
    
    print_r($arr);
    
    $newarray = array();
    // Swap around the keys
    foreach ($arr as $key1 => $val1) {
        foreach ($val1 as $key2 => $val2) {
            $newarray[$key2][$key1] = $val2;        
        }
    }
    print_r($newarray);
    

    这是显示:

    // Display of $arr:
    //Array
    //(
    //    [abc] => Array
    //        (
    //            [0] => val1
    //            [1] => val2
    //            [2] => val3
    //        )
    //
    //    [xyz] => Array
    //        (
    //            [0] => val4
    //            [1] => val5
    //            [2] => val6
    //        )
    //
    //)
    
    
    
    //Display of $newarray:
    //Array
    //(
    //    [0] => Array
    //        (
    //            [abc] => val1
    //            [xyz] => val4
    //        )
    //
    //    [1] => Array
    //        (
    //            [abc] => val2
    //            [xyz] => val5
    //        )
    //
    //    [2] => Array
    //        (
    //            [abc] => val3
    //            [xyz] => val6
    //        )
    //
    //)
    

    【讨论】:

      【解决方案3】:

      听起来您可能正在寻找的是array_flip。见这里:

      http://us3.php.net/manual/en/function.array-flip.php

      【讨论】:

      • 我不确定这是否可行,请注意,该函数的文档指出“trans 的值需要是有效的键,即它们需要是整数或字符串”,在此如果发布者想要切换二维数组中的键。对二维数组使用 array_flip 是行不通的,因为外部数组中每个元素的值都是数组本身,而不是字符串或整数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2020-07-12
      • 2014-01-19
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多