У меня есть такой массив:
$array = [
'data' => [
0 => 2678
1 => 2378
],
'active' => [
0 => 866
1 => 111
]
..........
]
Я хочу вставить такой CSV
data active
2678 866
2378 111
Я пробовал вот так:
fputcsv($fp,array_keys($array));
fputcsv($fp,array_values($array));
Но что-то не работает. У меня в csv показан только заголовок, я имею в виду только данные data active без данных. Пожалуйста, помоги мне
Как этого добиться с помощью foreach ()? Я не имею в виду, как написать только один раз ключевое имя массива
это не сработало из-за вашей версии PHP. 5.3 не поддерживает []. Где вы должны были получить сообщение об ошибке. Обновлено: этот комментарий в соответствии с двумя версиями версий php stackoverflow.com/posts/51879952/revisions
@FunkFortyNiner извините
здесь слишком много правок для любой версии php.
Бит ......... меня сейчас беспокоит. Сколько других массивов в этом массиве
Много.............






array_values ничего не делает, кроме как возвращает ваш существующий массив без каких-либо ключей, поэтому вы все равно передаете 2D-массив в fputcsv, с чем он не может работать.
По сути, вы хотите выполнить операцию с каждой «строкой» в вашем массиве. Это абсолютно то, для чего нужен цикл foreach, поэтому я не уверен, почему вы пытаетесь избежать этого. Если у вас нет особой причины избегать их (и я не могу представить, что это может быть), вам следует использовать эту структуру.
Чтобы ваш код заработал, все, что вам нужно сделать, это обернуть цикл вокруг вашего второго вызова fputcsv:
foreach ($array as $row) {
fputcsv($fp, $row);
}
Редактировать: Извините, я не заметил, что в вопросе был транспонирован массив. Если вы хотите поработать с этим, вам нужно добавить строку:
$array = array_map(null, ...array_values($array));
перед отображением данных.
См. Полный пример в https://3v4l.org/AoRcQ.
Если я увижу пример: $ array = ['data' => [0 => 2678, 1 => 2378,], 'active' => [0 => 866, 1 => 111,],]; Правильный возврат должен быть: data,active 2678,866 2378,111
@ Джордж, теперь я понимаю. Я обновил ответ и пример.
Добавьте эту строку: $array = array_map(null, array_values($array)); перед foreach?
В моем ответе вам не хватает ..., но да. См. Связанный пример, в нем есть все, что вам нужно.
@iainn, array_map (null, ... значения_массива ($ array)); когда у нас будет три точки ... array_values ($ array)
Что не так с циклом foreach