Как одновременно обходить два масива?
Я новичок в PHP. Делаю свой импорт/экспорт данных Excel. У меня есть вложенный массив с данными такого вида:
Array
(
[0] => Array
(
[number] => 1
[full_name] => Иванов Иван Иванович
[date] => 1995:07:02
[adress] => г. Москва
[passport] => ВС212928
[childs] => да
[salary] => 15,000.00 ₽
)
[1] => Array
(
[number] => 2
[full_name] => Петров Петр Петрович
[date] => 1993:01:01
[adress] => г. Москва
[passport] => АС212121
[childs] => нет
[salary] => 20,000.00 ₽
)
[2] => Array
(
[number] => 3
[full_name] => Сидоров Николай Николеевич
[date] => 1994:02:05
[adress] => г. Москва
[passport] => ВК199894
[childs] => да
[salary] => 1,200,000.00 ₽
)
}
Эти данные я вставляю в Excel, но сейчас это работает слишком жестко, с привязкой на количество рядов в таблице. Вот так
foreach ($rows as $row) {
$active_sheet->setCellValue('A' . $count, $row['number']);
$active_sheet->setCellValue('B' . $count, $row['full_name']);
$active_sheet->setCellValue('C' . $count, $row['date']);
$active_sheet->setCellValue('D' . $count, $row['adress']);
$active_sheet->setCellValue('E' . $count, $row['passport']);
$active_sheet->setCellValue('F' . $count, $row['childs']);
$active_sheet->setCellValue('G' . $count, $row['salary']);
$count = $count + 1;
}
Я создал массив с алфавитом
$alphabet = range('A','Z')
Как я могу динамически подставлять буквы алфавитаи значения из моего массива с данными в метод setCellValue()
Пытаюсь сделать так, но не работает, т.к у меня имеется вложенность
foreach ($rows as $key => $row) {
$active_sheet->setCellValue($alphabet[$key] . $count, $row[$key]);
$count = $count + 1;
}
Ответы (2 шт):
$alphabet = range('A','Z');
foreach ($rows as $idx => $row) {
// счетчик для алфавита
// 0 => A
// на каждой итерации начинается с 0
$alphaCount = 0;
// перебираем массив данных для записи ($row)
foreach($row as $value) {
// для каждого массива записываем букву алфавита ($alphabet[$alphaCount])
// и индекс текущего массива ($idx) как ключ, а значение передаем напрямую
$active_sheet->setCellValue($alphabet[$alphaCount] . $idx, $value);
// увеличиваем значение счетчика алфавита, чтобы для следующего значения
// текущего массива ($row) брать следующую букву алфавита
$alphaCount++;
}
}
Excel позволяет использовать нотацию не только A1 и т.п., но и использованием числовых индексов столбца и строки.
Используемая вами библиотека PhpSpreadsheet также имеет встроенные методы для работы с индексами - setCellValueByColumnAndRow. Так что код сводится к банальному
foreach($rows as $rIdx => $row){
foreach($row as $colIdx => $col){
$sheet->setCellValueByColumnAndRow(1 + $colIdx, $rowIdx, $col);
}
}