如何在多阵列中“重新排序”键?例如,我有:
$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"]
反转的键。
答案 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。见这里: