【问题标题】:How to convert multi-dimensional array into single array using PHP?如何使用 PHP 将多维数组转换为单个数组?
【发布时间】:2017-05-26 03:20:08
【问题描述】:

实现数据库查询后,得到下面的多维数组。

二维数组

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
)

我该怎么做?

【问题讨论】:

  • 它使用 mysql 查询动态实现。你会在 html 中看到什么?@AbdulWaheed
  • 显示创建第一个数组的代码,这就是您的问题所在
  • @Mohammad,只是好奇,您想获得哪些额外的information / requirements 尚未提供?显然,我们没有提供您真正想要的解决方案?
  • @RyanVincent 这个问题有多个答案包含不同的解决方案。但我认为这个问题对其他人来说很重要,并且没有得到足够的关注。我使用bounty 向其他用户展示问题并获得新的解决方案。

标签: php arrays multidimensional-array array-reduce


【解决方案1】:

我认为你可以使用 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

【讨论】:

    【解决方案2】:

    你可以如下使用:

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

    其中 $arrayData 是您的数据库数据数组,$newArray 将是结果。

    【讨论】:

    • 最好是解决问题的根源,而不是摆弄坏数据。
    【解决方案3】:

    假设源数组是数组数组并且没有相同的键:

    <?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;
      });
      

      检查结果在demo

      【讨论】:

        【解决方案5】:

        试试这个功能,

        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】:

          你可以用这个

          <?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);
          
          ?>
          

          【讨论】:

          • 最好是解决问题的根源,而不是摆弄坏数据。
          【解决方案7】:
          // 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;
          

          【讨论】:

            【解决方案8】:

            试试数组映射功能。

            $singleDimensionArray = array_map('current',$multiDimensionArray);
            

            【讨论】:

              【解决方案9】:

              如果你不关心保持正确的数组键,你可以使用它

              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 上同时查看

              From answer on similar question

              【讨论】:

              • 通过在输出中保留正确的数组键来进行编辑以更好地匹配 OP 问题。
              【解决方案10】:

              嘿@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】:

                请试试这个功能:

                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】:

                  您可以尝试使用 PHP while listeach 遍历数组。我从 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】:

                    对于您的具体情况,我会使用array_reduce,在其中我通过空数组设置初始值

                    array_reduce($arr, function($last, $row) {
                                    return $last + $row;
                                }, array());
                    

                    PHP 7.4 之后

                    array_reduce($arr, fn ($last, $row) => $last + $row, array());
                    

                    结果:

                    array(
                        't1' => 'test1',
                        't2' => 'test2',
                        't3' => 'test3',
                        't4' => 'test4',
                        't5' => 'test5'
                    )
                    

                    【讨论】:

                      【解决方案14】:

                      遍历数组并保存键值,Live Demo here

                      <?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】:

                        这样就可以了

                        $array = array_column($array, 't1');
                        

                        注意:此函数 array_column 在 PHP 5.5 中引入,因此在早期版本中不起作用。

                        【讨论】:

                          【解决方案16】:
                          `$result = "Query";  $key_value = array();`
                          
                                foreach ($result as $key => $value) {
                                    $key_value[$key['']] = $value[''];
                                }
                               //for checking //echo "<pre>" ; print_r($key_value) ; exit;
                                return $key_value;
                          

                          请填写$key['字段的sql查询中给出的名称']$value['字段的sql查询中给出的名称'](两者相同)

                          【讨论】:

                            【解决方案17】:

                            这对我有用

                             $result = [];
                                          foreach($excelEmails as $arr)
                                          {
                                              foreach ($arr as $item){
                                                  $result = array_merge($result , $item);
                                              }
                                          }
                                          dd($result);
                            

                            【讨论】:

                              【解决方案18】:

                              我会推荐我将所有二维数组转换为一维数组的方法。

                              <?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

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2013-11-23
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2016-02-05
                                • 2023-03-12
                                相关资源
                                最近更新 更多