#php #multidimensional-array
#php #многомерный массив
Вопрос:
Я хочу объединить два разных массива данных в один массив, но я не понимаю, как использовать array_push
в этом случае.
это пример моего ввода данных:
["author"]=>
array(2) {
[0]=>
string(1) "John"
[1]=>
string(1) "Doe"
}
["title"]=>
array(2) {
[0]=>
string(1) "book a"
[1]=>
string(1) "book b"
}
И результат в одном массиве, который я имею в виду, вот так:
["books"]=>
array(2) {
[0] =>
array(2) {
["author"]=>
string(1) "John"
["title"]=>
string(1) "book a"
}
[1] =>
array(2) {
["author"]=>
string(1) "Doe"
["title"]=>
string(1) "book b"
}
}
Я уже пытаюсь использовать этот способ, но он просто возвращает 1 из каждого массива:
$data['books'] = [];
array_push($data['books'], [
'author' => $data['author'],
'title' => $data['title']
]);
if (isset($data['books'])) {
foreach ($data['books'] as $k => $v) {
$data['books'][$k]['author'] = (int)$v['author'];
$data['books'][$k]['title'] = (int)$v['title'];
}
}
result:
["books"]=>
array(1) {
[0]=>
array(2) {
["author"]=>
int(1)
["title"]=>
int(1)
}
}
Комментарии:
1. «запутанный» означает, что именно? Покажите свои усилия и объясните, где вы застряли в коде.
2. Где вы застряли? Что вы пробовали? Что именно вас смущает?
array_push($arr, $val);
=$arr[] = $val;
. Они одинаковы. Оба добавляют элемент в массив.3. Как вы создаете первый массив? Это то, что вы хотите изменить, чтобы вместо этого получить второй.
Ответ №1:
Вы должны транспонировать свои массивы с учетом ключей.
function transpose(array $arr){
$transArr = [];
foreach($arr as $keyRow => $subArr) {
foreach($subArr as $keyCol => $value) {
$transArr[$keyCol][$keyRow] = $value;
}
}
return $transArr;
}
Эта функция может использоваться универсально для подобных задач. Функция происходит из этого класса.
Как использовать:
$input = [
"author"=> ["John","Doe"],
"title" => ["book a","book b"],
];
$books = transpose($input);
echo '<pre>';
var_export($books);
Или, если вы хотите использовать класс:
$books = tableArray::create($input)
->transpose()
->fetchAll()
;
Вывод:
array (
0 =>
array (
'author' => 'John',
'title' => 'book a',
),
1 =>
array (
'author' => 'Doe',
'title' => 'book b',
),
)
Если «author» и «title» существуют как два массива, сначала необходимо создать $ input следующим образом:
$input = ['author' => $arrayAuthor, 'title' => $arrayTitle];
Комментарии:
1. спасибо, чтобы ответить на мой вопрос:») на самом деле просто нужно создать 1 пустой массив var, а затем поместить его при циклировании каждого массива данных huhuhu