【问题标题】:How do I trim '\n' in multi dimensional array in php如何在 php 的多维数组中修剪 '\n'
【发布时间】:2017-11-21 12:04:18
【问题描述】:

var_dump($arr)的输出

array(4) {
  [0]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(2) "4
"
  }
  [1]=>
  array(4) {
    [0]=>
    string(1) "5"
    [1]=>
    string(1) "6"
    [2]=>
    string(1) "7"
    [3]=>
    string(2) "8
"
  }
  [2]=>
  array(4) {
    [0]=>
    string(1) "9"
    [1]=>
    string(2) "10"
    [2]=>
    string(2) "11"
    [3]=>
    string(3) "12
"
  }
  [3]=>
  array(4) {
    [0]=>
    string(2) "13"
    [1]=>
    string(2) "14"
    [2]=>
    string(2) "15"
    [3]=>
    string(2) "16"
  }
}

我想删除 $arr 数组中的 \n

我尝试使用array_walk($arr,'intval'); 但它不起作用,因为它是多维数组。解决办法是什么?

有没有内置的 PHP 函数?或者我需要使用循环并将其删除?

P.S:我是新手,尽量不要太技术化。

【问题讨论】:

  • 是的,\n 我的意思是,链接中断。
  • @FirstOne 是的,它位于 4812
  • array_walk 有一个兄弟名称array_walk_recursive ...
  • 在你的数组中循环使用简单的 trim()
  • 这不是你在这里讨论过的同一个问题吗,stackoverflow.com/q/47352713/1427878 ...?

标签: php arrays


【解决方案1】:

你可以这样做

array_walk_recursive($arr, function(&$v) { $v = trim($v); });

你不能直接使用trim作为回调,因为它不接受引用参数,所以你必须将它包装在一个回调中。

演示 https://eval.in/904410

【讨论】:

  • 就是这样,这个问题的单行优越答案。
  • @JasomDotnet 谢谢。大多数编码标准将使它成为一个七班轮;)
【解决方案2】:

您可以通过循环和array_map() 实现此目的

$arr = array(
    array("1", "2", "3", "4\n"),
    array("5", "6", "7", "8\n"),
    array("9", "10", "11", "12\n"),
    array("13", "14", "15", "16\n"),
);

// result array
$result = [];

// Loop thru array
foreach ($arr as $value) {
    // Map thru $value with trim to remove \n then push to result
    $result[] = array_map('trim', $value);
}

// Output
echo('<pre>');
print_r($result);

【讨论】:

    【解决方案3】:

    还有其他选择,但递归循环遍历您的数组可以让您灵活地选择要删除的内容,而不仅仅是换行符:

    function removeNewline($array) {
      $result = array();
      foreach ($array as $key => $value) {
        // If the array value is an array itself, call the function recursively
        if (is_array($value)) {
          $result[$key] = removeNewline($value);
        } else {
          // Only remove newlines from strings
          if (is_string($value)) {
            $result[$key] = preg_replace('/\s+/', '', $value);
          } else {
            $result[$key] = $value;
        }
      }
      return $result;
    }
    

    【讨论】:

    • 请注意,有一个用于递归遍历数组的内置函数。 array_walk_recursive
    • 是的,我刚刚发布了这个答案。它可能比我的功能更快。
    • 我不知道速度,但还有另一个方面就是不要重新发明轮子。使用内置/知名功能/工具时,您可以指望它们经过测试和优化(至少在大多数情况下)。无论如何,这是一个很好的大脑锻炼。
    猜你喜欢
    • 2021-08-07
    • 2012-08-15
    • 1970-01-01
    • 2011-08-11
    • 2015-05-04
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多