После реализации запросов к базе данных я получаю многомерный массив ниже.
Двумерный массив
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
)
Пожалуйста, помогите мне сделать это
Я думаю, что вы можете использовать функцию 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
Вы можете использовать следующим образом:
$newArray = array();
foreach($arrayData as $key => $value) {
foreach($value as $key2 => $value2) {
$newArray[$key2] = $value2;
}
}
Где $ arrayData — это ваш массив данных БД, а $ newArray будет результатом.
Предполагая, что исходный массив является массивом массивов и у него нет одинаковых ключей:
<?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"}
Ты можешь использовать array_reduce()
изменить значения массива. При обратном вызове получить ключ элемента, используя key()
и выберите первый элемент, используя reset()
.
$newArr = array_reduce($oldArr, function($carry, $item){
$carry[key($item)] = reset($item);
return $carry;
});
Проверить результат в демонстрация
Попробуйте эту функцию,
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);
Попробуйте, это сработает.
Вы можете использовать это, если вы не заботитесь о сохранении правильных ключей массива
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
)
Проверьте оба на песочница
Вы можете использовать это
<?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);
?>
// 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;