【问题标题】:How to trim the whitespace from an array in PHP如何从PHP中的数组中修剪空白
【发布时间】:2014-07-23 15:42:43
【问题描述】:

我正在尝试解析一个 CSV 文件,作为其中的一部分,我想从我的所有单元格中删除前导/尾随空格。由于它是 CSV 文件,因此它的格式类似于 2D 数组。最初我尝试过:

foreach($csv as $row){
    foreach($row as $cell){
        $cell = trim($cell);
    }
}

但是结果是未修剪的。

接下来我尝试按照here 的建议使用array_map。

$csv = array_map('trim', $csv);

这给了我一个空行数组。所以我也尝试了

foreach($csv as $row){
    $row = array_map('trim', $row);
}

就像我的第一次尝试并没有改变任何东西。

这是我用作输入的 CSV 数据:

名字、姓氏、联系方式、电话、电子邮件 约翰,Doe,电子邮件,1-XXX-XXX-XXXX,john@example.com Jane,Doe,电话,1-XXX-XXX-XXXX,jane@example.com

特别是我试图让我的脚本修剪第一行最后一个单元格中的前导空格(“电子邮件”=>“电子邮件”)。

【问题讨论】:

标签: php arrays string csv


【解决方案1】:

进行修剪时,您不会修改原始数组。您应该在 foreach 循环中通过引用获取值。

foreach($csv as &$row){
    foreach($row as &$cell){
        $cell = trim($cell);
    }
}

来自documentation

为了能够在循环内直接修改数组元素 在 $value 之前加上 &。在这种情况下,该值将由 reference.

【讨论】:

    【解决方案2】:

    您需要引用$row 才能对数组进行更改(注意&):

    foreach($csv as &$row){
        $row = array_map('trim', $row);
    }
    

    【讨论】:

      【解决方案3】:

      如果你看到它就像你放在这里的那样,

      " Email" => "Email"
      

      你必须从键中修剪它,你能说明你是如何分配命名标题的吗?因为我会在那里修剪它,但是使用 array_map('trim', $data) 会删除空格,所以我整天都这样做。

      好吧,只是清理你可以做的钥匙,

       $keys = array_map( 'trim', array_keys($data) );
       $data = array_combine( $keys, $data );
      

      【讨论】:

      • 我认为他的" Email" => "Email" 示例是他描述原始值和他想要的期望值的方式。不是数组结构(尽管由于他使用=> 可能看起来像)
      • 那么为什么数组映射不起作用,我这样做了 100 次,好吧我真的没有,但是因为我有一个 splfileobj csv 阅读器,我应该顺便发布一下哈哈。跨度>
      • 他忘记通过引用传递迭代值,所以他没有修剪原始数组。
      • 这与使用 array_map('trim', $data); 无关正如 OP 说他们尝试过的那样,这里还有其他问题,如果没有更多代码,这些问题是不可能说出来的。
      【解决方案4】:
      $input = [
          'parent' => [
              'child' => ' element to be trimmed '
          ]
      ];
      array_walk_recursive($input, function (&$item) {
          if (!is_array($item)) {
              $item = trim($item);
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2012-04-09
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        • 2010-11-14
        • 2011-08-11
        • 1970-01-01
        • 2013-02-01
        • 2010-11-09
        相关资源
        最近更新 更多