【问题标题】:Create new Array under same key from multiple Array in PHP从 PHP 中的多个数组的相同键下创建新数组
【发布时间】:2020-03-17 17:00:48
【问题描述】:

我有以下数组。

$a = array("Algebra", "Arithmetic");
$b = array("08/01/2020", "08/02/2019");
$c = array("08/01/2020", "08/02/2019");

print_r($a);
print_r($b);
print_r($b);

输出是

Array(
    [0] => Algebra
    [1] => Arithmetic
  )

Array(
    [0] => 08/01/2020
    [1] => 08/01/2019
  )

Array(
    [0] => 08/02/2020
    [1] => 08/02/2019
  )

我希望 Array 具有以下结构。

Array(
 [0] => Algebra,08/01/2020,08/02/2020
 [1] => Arithmetic,08/01/2019,08/02/2019
)

我尝试过$results = array_merge_recursive($a, $b, $c);,但它没有给出期望的输出。

提前感谢您的帮助。

【问题讨论】:

  • 您想将数组转换成逗号分隔的列表吗?
  • 请使用print_r()var_dump() 或更好的var_export() 显示您的输入数组,以便它看起来像一个真正的数组还是3 个单独的数组
  • 你有 3 个不同的数组还是一个多维数组?
  • @FelippeDuarte 我有 3 个不同的数组。
  • @RiggsFolly 我已经更新了显示输入数组和 print_r() 的问题。以及逗号分隔列表中所需的数组值。

标签: php arrays arraylist


【解决方案1】:

一个简单的 foreach 循环就足够了

$a = array("Algebra", "Arithmetic");
$b = array("08/01/2020", "08/02/2019");
$c = array("08/01/2020", "08/02/2019");

foreach( $a as $i=>$v ) {
    $new[] = sprintf( '%s,%s,%s', $v, $b[$i], $c[$i] );
}

【讨论】:

    【解决方案2】:

    首先,当您发现自己使用按顺序命名的变量时,几乎总是意味着它们实际上应该是一个数组:

    $a = array("Algebra", "Arithmetic");
    $b = array("08/01/2020", "08/02/2019");
    $c = array("08/01/2020", "08/02/2019");
    
    $better_array = [$a, $b, $c];
    var_dump($better_array);
    

    输出:

    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(7) "Algebra"
        [1]=>
        string(10) "Arithmetic"
      }
      [1]=>
      array(2) {
        [0]=>
        string(10) "08/01/2020"
        [1]=>
        string(10) "08/02/2019"
      }
      [2]=>
      array(2) {
        [0]=>
        string(10) "08/01/2020"
        [1]=>
        string(10) "08/02/2019"
      }
    }
    

    一旦它们位于正确的数组中,您就可以使用array_column()

    $out = [];
    for($i=0, $c=count($better_array[0]); $i < $c; ++$i) {
        $out[] = array_column($better_array, $i);
    }
    var_dump($out);
    

    输出:

    array(2) {
      [0]=>
      array(3) {
        [0]=>
        string(7) "Algebra"
        [1]=>
        string(10) "08/01/2020"
        [2]=>
        string(10) "08/01/2020"
      }
      [1]=>
      array(3) {
        [0]=>
        string(10) "Arithmetic"
        [1]=>
        string(10) "08/02/2019"
        [2]=>
        string(10) "08/02/2019"
      }
    }
    

    如果那个逗号分隔的字符串是你真正想要的,那么使用implode():

    $out = [];
    for($i=0, $c=count($better_array[0]); $i < $c; ++$i) {
        $out[] = implode(',', array_column($better_array, $i));
    }
    var_dump($out);
    

    输出:

    array(2) {
      [0]=>
      string(29) "Algebra,08/01/2020,08/01/2020"
      [1]=>
      string(32) "Arithmetic,08/02/2019,08/02/2019"
    }
    

    最后,您应该避免使用print_r(),因为它往往会产生误导性的输出。例如:https://3v4l.org/ThSLb

    【讨论】:

      【解决方案3】:

      你没有为此目的内置任何东西。您需要为此构建一个自定义函数。你可以试试这个-

      <?php
      $a = array("Algebra", "Arithmetic");
      $b = array("08/01/2020", "08/01/2019");
      $c = array("08/02/2020", "08/02/2019");
      
      function mergeAssoc()
      {
          // You can get variable number of arguments|array by this.
          $args = func_get_args();
      
          $master = array();
      
          foreach ($args as $arg)
          {
              foreach ($arg as $i => $v)
              {
                  $master[$i][] = $v;
              }
          }
      
          return $master;
      }
      
      $res = mergeAssoc($a, $b, $c);
      
      print_r($res);
      

      注意:它会返回一个多维数组。不是逗号分隔值的数组。

      输出:

      Array
      (
          [0] => Array
              (
                  [0] => Algebra
                  [1] => 08/01/2020
                  [2] => 08/02/2020
              )
      
          [1] => Array
              (
                  [0] => Arithmetic
                  [1] => 08/01/2019
                  [2] => 08/02/2019
              )
      
      )
      

      如果我们使用foreach,那么我们的期望输出将在那里,数组以逗号分隔。

      foreach ($res as $key => $value) {
       $result[] = implode(',', $value);
      }
      

      print_r($result); 的输出是

      Array
       (
        [0] => Algebra,08/01/2020,08/02/2020
        [1] => Arithmetic,08/01/2019,08/02/2019
      )
      

      【讨论】:

        猜你喜欢
        • 2016-07-29
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多