【问题标题】:How to implode subarrays in a 2-dimensional array?如何在二维数组中内爆子数组?
【发布时间】:2017-07-22 10:54:54
【问题描述】:

如果它们是数组,我想将值内爆到逗号分隔的字符串中:

我有以下数组:

$my_array = [
    "keywords" => "test",
    "locationId" => [ 0 => "1", 1 => "2"],
    "industries" => "1"
];

为了实现这一点,我有以下代码:

foreach ($my_array as &$value)
    is_array($value) ? $value = implode(",", $value) : $value;
unset($value);

上面的也会改变原来的数组。有没有更优雅的方法来创建与上述相同的新数组?

我的意思是,如果它们是单行代码中的数组,则内爆值?也许array_map()? ...但是我必须创建另一个函数。

【问题讨论】:

  • 为什么必须在一行代码中?拥有更详细、更易读的代码不是更好吗?
  • & 运算符正是这样做的,assign by reference,因此您明确要求 PHP 修改原始数组。因此,首先,您不需要使用&

标签: php multidimensional-array implode


【解决方案1】:

只需创建一个新数组并设置元素 (-;

<?php
...
$new_array = [];
foreach ($my_array as $key => $value)
     $new_array[$key] = is_array($value) ? implode(",", $value) : $value;

【讨论】:

    【解决方案2】:

    只需将值附加到新数组:

    $my_array = [
       "keywords" => "test",
       "locationId" => [ 0 => "1", 1 => "2"],
       "industries" => "1",
    ];
    $new_Array = [];
    foreach ($my_array as $value) {
        $new_Array[] = is_array($value) ? implode(",", $value) : $value;
    }
    print_r($new_Array);
    

    还有一些可以称为“单线”的东西

    $new_Array = array_reduce($my_array, function($t, $v) { $t[] = is_array($v) ? implode(",", $v) : $v; return $t; }, []);
    

    现在比较两种解决方案并判断哪个更易读。

    【讨论】:

      【解决方案3】:

      如果您在将字符串(非数组)type 内爆之前将其作为单元素数组,则无需编写/迭代条件语句。

      array_map(): (Demo)

      $my_array = [
          "keywords" => "test",
          "locationId" => [ 0 => "1", 1 => "2"],
          "industries" => "1"
      ];
      
      var_export(
          array_map(
              function($v) {
                  return implode(',', (array)$v);
              },
              $my_array
          )
      );
      

      或者来自 PHP7.4,array_map() 带有箭头函数语法:(Demo)

      var_export(
          array_map(fn($v) => implode(',', (array)$v), $my_array)
      );
      

      array_walk() 并通过引用修改 (Demo)

      array_walk(
          $my_array,
          function(&$v) {
              $v = implode(',', (array)$v);
          }
      );
      var_export($my_array);
      

      或 foreach 循环:(Demo)

      foreach ($my_array as &$v) {
          $v = implode(',', (array)$v);
      }
      var_export($my_array);
      

      所有的sn-ps都会输出:

      array (
        'keywords' => 'test',
        'locationId' => '1,2',
        'industries' => '1',
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 2011-07-12
        • 2017-01-19
        • 1970-01-01
        相关资源
        最近更新 更多