实现数据库查询后,我将获得下面的多维数组。
二维数组
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
)
请帮我这样做
答案 0 :(得分:8)
我认为你可以使用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
答案 1 :(得分:4)
您可以按如下方式使用:
Portrait
其中$ arrayData是您的数据库数据数组,$ newArray将是结果。
答案 2 :(得分: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"
}
答案 3 :(得分:3)
您可以使用array_reduce()
更改数组的值。在回调中使用key()
获取项目的关键字,然后使用reset()
选择第一项。
$newArr = array_reduce($oldArr, function($carry, $item){
$carry[key($item)] = reset($item);
return $carry;
});
检查demo
中的结果答案 4 :(得分: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
)
同时检查Sandbox
答案 5 :(得分: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);
尝试一下,它会起作用。
答案 6 :(得分:3)
尝试这样的事情 对于您的有限用例,我们会这样做:
$oneDimensionalArray = array_map('current', $twoDimensionalArray);
当子数组有许多条目时,这可以更加通用:
$oneDimensionalArray = call_user_func_array('array_merge', $twoDimensionalArray);
答案 7 :(得分:2)
您可以使用此
<?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);
?>
答案 8 :(得分:2)
尝试数组地图功能。
$singleDimensionArray = array_map('current',$multiDimensionArray);
答案 9 :(得分: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;
答案 10 :(得分:1)
嘿@Karan Adhikari简单如下:
<?php
$arr1 = array(array("t1" => "test1"), array("t2" => "test2"), array("t3" => "test3"), array("t4" => "test4"), array("t5" => "test5"));
echo "<pre>";
print_r($arr1);//before
$arr2 = array();
foreach($arr1 as $val){
$arr2 = array_merge($arr2, $val);
}
echo "<pre>";
print_r($arr2); // after you get your answer
答案 11 :(得分:1)
请尝试此功能:
function array_merging($multi_array) {
if (is_array($multi_array)) {
$new_arr = array();
foreach ($multi_array as $key => $value) {
if (is_array($value)) {
$new_arr = array_merge($new_arr, array_merging($value));
}
else {
$new_arr[$key] = $value;
}
}
return $new_arr;
}
else {
return false;
}
}
使用此功能:
$your_multi_arr = array(array(array('t1'=>'test1'),array('t2'=>'test2'),array('t3'=>'test3'),array('t4'=>'test4')));
$arr1 = array_merging($your_multi_arr);
echo "<pre>";
print_r($arr1);
希望,这可能对你有用。
答案 12 :(得分:1)
您可以尝试使用PHP while
list
和each
遍历数组。我从PHP网站上获取了第二个示例的示例代码,您可以查看它here
$arr = [['t1' => 'test1'],['t2' => 'test2'],['t3' => 'test3'],['t4' => 'test4'],['t5' => 'test5']];
$output = [];
while (list($key, $val) = each($arr)) {
while (list($k, $v) = each($val)) {
$output[$k] = $v;
}
}
print_r($output);
创建的输出是
Array
(
[t1] => test1
[t2] => test2
[t3] => test3
[t4] => test4
[t5] => test5
)
您可以在此Sandbox示例中自行测试。
答案 13 :(得分:0)
对于您的具体情况,我会使用array_reduce
,其中我将init值设置为空数组
array_reduce($arr, function($last, $row) {
return $last + $row;
}, array());
结果:
array(
't1' => 'test1',
't2' => 'test2',
't3' => 'test3',
't4' => 'test4',
't5' => 'test5'
)
答案 14 :(得分:0)
<?php
$array = array(array('t1' => 'test1'), array('t2' => 'test2'), array('t3' => 'test3'), array('t4' => 'test4'), array('t5' => 'test5'));
$result = [];
array_walk($array, function($value) use(&$result){
foreach($value as $k => $v)
{
$result[$k] = $v;
}
});
var_dump($result);
答案 15 :(得分:0)
这样就可以了解
$array = array_column($array, 't1');
注意:这个函数array_column是在PHP 5.5中引入的,因此它在早期版本中不起作用。
答案 16 :(得分:0)
{{1}}
请填写 $ key [&#39; sql查询中给出的字段&#39;] 和 $ value [&#39 ;字段&#39;] 的sql查询中给出的名称(两者都相同)
答案 17 :(得分:0)
这对我有用
$result = [];
foreach($excelEmails as $arr)
{
foreach ($arr as $item){
$result = array_merge($result , $item);
}
}
dd($result);
答案 18 :(得分:-1)
我会建议将所有二维数组转换为单维数组。
<?php
$single_Array = array();
//example array
$array = array(
array('t1' => 'test1'),
array('t2' => 'test2'),
array('t3' => 'test3'),
array('t4' => 'test4'),
array('t5' => 'test5'));
$size = sizeof($array);
//loop to fill the new single-dimensional array
for($count = 0; $count<sizeof($array);$count++)
{
//take the key of multi-dim array
$second_cell = key($array[$count]);
//set the value into the new array
$single_array[$count] = $array[$count][$second_cell];
}
//see the results
var_dump($single_array);
?>
使用这个脚本,我们可以使用键和值来创建新的单维数组。我希望我对你有所帮助。
您可以在此处查看示例:Array Convert Demo