Как преобразовать многомерный массив в один массив с помощью PHP?

После реализации запросов к базе данных я получаю многомерный массив ниже.

Двумерный массив

Array
(
[0] => Array
(
[t1] => test1
)

[1] => Array
(
[t2] => test2
)

[2] => Array
(
[t3] => test3
)

[3] => Array
(
[t4] => test4
)

[4] => Array
(
[t5] => test5
)

)

но я хочу преобразовать его в одномерный массив, как в формате ниже.

Одномерный массив

Array (
t1 => test1
t2 => test2
t3 => test3
t4 => test4
t5 => test5
)

Пожалуйста, помогите мне сделать это

11

Решение

Я думаю, что вы можете использовать функцию array_reduce ().
Например:

   $multi= array(0 => array('t1' => 'test1'),1 => array('t2' => 'test2'),2 => array('t3' => 'test3'),3 => array('t4' => 'test4'));
$single= array_reduce($multi, 'array_merge', array());
print_r($single);  //Outputs the reduced aray
8

Другие решения

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

$newArray = array();
foreach($arrayData as $key => $value) {
foreach($value as $key2 => $value2) {
$newArray[$key2] = $value2;
}
}

Где $ arrayData — это ваш массив данных БД, а $ newArray будет результатом.

4

Предполагая, что исходный массив является массивом массивов и у него нет одинаковых ключей:

<?php
$src = [
['t1'=>'test1'],
['t2'=>'test2'],
['t3'=>'test3'],
['t4'=>'test4'],
['t5'=>'test5'],
];
$result = call_user_func_array('array_merge', $src);

результат через var_dump ():

array(5) {
["t1"]=>
string(5) "test1"["t2"]=>
string(5) "test2"["t3"]=>
string(5) "test3"["t4"]=>
string(5) "test4"["t5"]=>
string(5) "test5"}
4

Ты можешь использовать array_reduce() изменить значения массива. При обратном вызове получить ключ элемента, используя key() и выберите первый элемент, используя reset().

$newArr = array_reduce($oldArr, function($carry, $item){
$carry[key($item)] = reset($item);
return $carry;
});

Проверить результат в демонстрация

3

Попробуйте эту функцию,

function custom_function($input_array)
{
$output_array = array();
for ($i = 0; $i < count($input_array); $i++) {
for ($j = 0; $j < count($input_array[$i]); $j++) {
$output_array[key($input_array[$i])] = $input_array[$i][key($input_array[$i])];
}
}
return $output_array;
}

$arr = custom_function($arr);
print_r($arr);

Попробуйте, это сработает.

3

Вы можете использовать это, если вы не заботитесь о сохранении правильных ключей массива

function flattenA(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
print_r(flattenA($arr));
// Output
Array
(
[0] => test1
[1] => test2
[2] => test3
[3] => test4
[4] => test5
)

Иначе

function flattenB(array $array) {
$return = array();
array_walk_recursive($array, function($v,$k) use (&$return) { $return[$k] = $v; });
return $return;
}
print_r(flattenB($arr));
// Output
Array
(
[t1] => test1
[t2] => test2
[t3] => test3
[t4] => test4
[t5] => test5
)

Проверьте оба на песочница

От ответа на аналогичный вопрос

3

Вы можете использовать это

<?php
$temp = array(array('t1' => 'test1'), array('t2' => 'test2'), array('t3' => 'test3'), array('t4' => 'test4'), array('t5' => 'test5'));

$result_array = array();
foreach ($temp as $val) {
foreach ($val as $key => $inner_val) {
$result_array[$key] = $inner_val;
}
}
print_r($result_array);

?>
2
// Multidimensional array
$arrdata = Array(
'0' => Array(
't1' => 'test1'
) ,
'1' => Array(
't2' => 'test2'
) ,
'2' => Array(
't3' => 'test3'
)
);

// Convert to a single array
$data = array();
foreach($arrdata as $key => $value) {
foreach($value as $key1 => $value1) {
$data[$key1] = $value1;
}
}
echo $data;
2