Перемещение порядка клавиш в многомерном массиве - PullRequest
0 голосов
/ 23 июня 2009

Как я могу «переупорядочить» ключи в множественном массиве? Например, у меня есть:

$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;

но, похоже, это не работает. Любая помощь будет оценена.

EDIT: В частности, я пытаюсь перебрать все элементы, представленные в $_FILES, поскольку им всем нужно сделать то же самое. По умолчанию, когда в форме более одного <input type="file" name="filedata[]" />, они переходят на $_FILES["filedata"]["name"][$index]. ("name" или любой другой параметр), поэтому я не могу просто перебрать каждый $_FILES["filedata"], чтобы получить все; таким образом, мне нужны ключи $_FILES["filedata"] в обратном порядке.

Ответы [ 3 ]

4 голосов
/ 23 июня 2009

Я думаю, вам все еще нужно взять ключи во втором foreach. Попробуйте что-то вроде:

foreach($arr as $k1 => $v1) {
  foreach ($v1 as $k2 => $v2) {
    $newArray[$k2][$k1] = $v2
  }
}
1 голос
/ 23 июня 2009

Достаточно просто с двумя 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
//        )
//
//)
0 голосов
/ 23 июня 2009

Звучит так, как будто вы ищете, это array_flip. Смотрите здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...