在多维数组中移动键顺序

时间:2009-06-22 20:13:00

标签: php arrays

如何在多阵列中“重新排序”键?例如,我有:

$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"]反转的键。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

直截了当,有两个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
//        )
//
//)

答案 2 :(得分:0)

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

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