PHP выходной многомерный массив - PullRequest
0 голосов
/ 04 октября 2018

Я застрял в этом вопросе на некоторое время.У меня есть многомерный массив, который я хотел бы вывести определенным образом.Вот массив:


    array:3 [
      "First Name" => array:3 [
        0 => "BILLY"
        1 => "SALLY"
        2 => "TYLER"
      ]
      "Last Name" => array:3 [
        0 => "RAY"
        1 => "SUE"
        2 => "TERRIER"
      ]
      "HOBBY" => array:3 [
        0 => "PIANO"
        1 => "SKATING"
        2 => "BASKETBALL"
      ]
    ]

Я бы хотел, чтобы конечный результат был следующим:


    BILLY|RAY|PIANO|
    SALLY|SUE|SKATING|
    TYLER|TERRIER|BASKETBALL|

К сожалению, с имеющимся у меня кодом:



    $output = '';
     foreach($tempArray as $key => $value){
         $output .= $value[array_search($key,$tempArray)].$delimiter;  
     }

выводит только первый индекс каждого массива следующим образом:


    BILLY|RAY|PIANO|

Итак, мой вопрос: как мне получить оставшиеся два значения?Должен ли я создать какую-то сортировку или массив и счетчик и сохранить каждый вывод следующим образом: $newArray[$counter] = $output?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Если все три вложенных массива всегда имеют одинаковый размер, вы можете просто использовать цикл for:

$array = [
    "First Name" => ["BILLY", "SALLY", "TYLER"],
    "Last Name" => ["RAY", "SUE", "TERRIER"],
    "HOBBY" => ["PIANO", "SKATING", "BASKETBALL"],
];

$result = '';
$size = count($array["First Name"]);
for($i = 0; $i < $size; $i++){
   $result.= "{$array['First Name'][$i]}|{$array['Last Name'][$i]}|{$array['HOBBY'][$i]}\r\n";
}
echo $result;

enter image description here

0 голосов
/ 04 октября 2018

Функция array_column() извлекает столбец из двумерного массива.Затем просто соедините их вместе.

$array = [
    "First Name" => ["BILLY", "SALLY", "TYLER"],
    "Last Name" => ["RAY", "SUE", "TERRIER"],
    "HOBBY" => ["PIANO", "SKATING", "BASKETBALL"],
];

$result = implode("|", array_column($array, 0)) . "\n";
$result .= implode("|", array_column($array, 1)) . "\n";
$result .= implode("|", array_column($array, 2));
echo $result;

Как указано в комментарии, вы не всегда можете знать длину дочерних массивов.Это означало бы обернуть это в цикл:

$iterations = count(reset($array));
$result = "";
for ($i = 0; $i <= $iterations; $i++) {
    $result .= implode("|", array_column($array, $i)) . "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...