【问题标题】:PHP multidimensionnal array and empty valuePHP多维数组和空值
【发布时间】:2017-10-21 03:09:22
【问题描述】:

在文本区域中,我按照一种模式粘贴随机数据:

Data1    Data2    Data3    Data4    Data5    Data6    Data7  
Data8    Data9    Data10    Data11    Data12    Data13    Data14

喜欢:

姓名[4*SPACE] 姓[4*SPACE] 地址[4*SPACE] 国家[4*SPACE] 电话 [4*SPACE] 性别 [4*SPACE] 年龄 [4*SPACE] [换行符]

在这种模式下,最后一个数据(这里的年龄)可以为空。

所以我做到了:

<form>
   <textarea rows="15" cols="100" name="query" id="pastedata">Paste datas there.</textarea>
   <p style="margin-left: 320px;"><input type="submit" name="submit"value="Submit" /></p>
</form>

<?php


if(isset($_GET['query'])) {
    $query = $_GET['query'];
$query = str_replace('    ', ',', $query);
$query = str_replace("\n", ',', $query);
$info = explode (',', $query);
$result = array_map('trim', $info);
print_r(array_chunk($result, 7));
}

它完成了它的工作...... PHP 返回一个遵循 7 列模式的多维数组,除非最后一个数据为空,因此它将移动下一个数组的第一行。

我如何对 PHP 说,如果在任何数组中最后一个值为空,那么只返回类似“空数据”的内容?

这是我的第一个 PHP 行,所以我确定结构已损坏。


编辑:非常感谢大家,它现在按预期工作!

【问题讨论】:

  • 你能举一个你正在寻找的结果的例子吗?
  • 只对输入应用修剪? $query = trim($_GET['query'])

标签: php multidimensional-array


【解决方案1】:
<?php

$_GET['query'] = 'Data1    Data2    Data3    Data4    Data5    Data6    Data7 
Data8    Data9    Data10    Data11    Data12    Data13    Data14';


if(isset($_GET['query'])) {
   $query = $_GET['query'];
   $query = explode(PHP_EOL, $query);
   foreach($query as &$q){
       $q = trim($q);
       $q = explode('    ', $q);
   }
var_dump($query);
}

第一个在 EOL 时爆炸字符串 比每行修剪空白并在 [4*space] 上爆炸它们

这将是结果:

array
  0 => 
    array
      0 => string 'Data1' (length=5)
      1 => string 'Data2' (length=5)
      2 => string 'Data3' (length=5)
      3 => string 'Data4' (length=5)
      4 => string 'Data5' (length=5)
      5 => string 'Data6' (length=5)
      6 => string 'Data7' (length=5)
  1 => &
    array
      0 => string 'Data8' (length=5)
      1 => string 'Data9' (length=5)
      2 => string 'Data10' (length=6)
      3 => string 'Data11' (length=6)
      4 => string 'Data12' (length=6)
      5 => string 'Data13' (length=6)
      6 => string 'Data14' (length=6)

【讨论】:

    【解决方案2】:

    肯定有更短的方法可以做到这一点,但这里有一个扩展的例子。

    http://sandbox.onlinephpfunctions.com/code/04507d4c64b2b0d53c6f490b1484e4b4bf54b9b3

    编辑 - 添加了用“空数据”替换空值的逻辑

    <?php
    $output = [];
    
    $input = "Data1    Data2    Data3    Data4    Data5    Data6    \nData8    Data9    Data10    Data11    Data12    Data13    Data14\n";
    
    // The preg_split with PREG_SPLIT_NO_EMPTY will ignore any empty lines.
    // http://php.net/manual/en/function.preg-split.php
    foreach (preg_split('/\n/', $input, -1, PREG_SPLIT_NO_EMPTY) as $line) {
    
        $pieces = explode('    ', $line);
    
        // Loop over pieces and check if it is empty. If so, replace it with a string.
        $output[] = array_map(function($value) {
           return trim($value) === '' ? 'Empty Data' : $value;
        }, $pieces);
    }
    
    print_r($output);
    

    【讨论】:

      【解决方案3】:

      您似乎想用行分隔符分割每条记录。在这种情况下,直接执行此操作,而不是将所有记录连接在一起,然后再将它们分开。

      此外,您可以直接在 4 个空格上展开,而不是转换为逗号。

      foreach (preg_split("/((\r?\n)|(\r\n?))/", $_GET['query']) as $line) {
          $info = explode ('    ', $query);
          $result = array_map('trim', $info);
          print_r(array_chunk($result, 7));
      }
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        $input = "Data1    Data2    Data3    Data4    Data5    Data6    Data7
        Data8    Data9    Data10    Data11    Data12    Data13
        Data15    Data16    Data17    Data18    Data19    Data20    Data21";
        
        parserInputData(explode("\n", $input));
        
        function parserInputData(array $lines){
            $output = [];
        
            foreach ($lines as $line) {
                $query  = $line;
                $query  = str_replace('    ', ',', $query);
                $query  = str_replace("\n", ',', $query);
                $info   = explode (',', $query);
                $result = array_map('trim', $info);
                $columnsCount = count($result);
        
                if( $columnsCount < 7 ){
                    $diff   = 7 - $columnsCount;
                    $result = array_merge($result, array_fill($columnsCount-1, $diff, 'Empty data'));
                }
        
                $output[] = $result;
            }
        
            print_r($output);
        }
        

        这段代码的输出是

        Array
        (
            [0] => Array
                (
                    [0] => Data1
                    [1] => Data2
                    [2] => Data3
                    [3] => Data4
                    [4] => Data5
                    [5] => Data6
                    [6] => Data7
                )
        
            [1] => Array
                (
                    [0] => Data8
                    [1] => Data9
                    [2] => Data10
                    [3] => Data11
                    [4] => Data12
                    [5] => Data13
                    [6] => Empty data
                )
        
            [2] => Array
                (
                    [0] => Data15
                    [1] => Data16
                    [2] => Data17
                    [3] => Data18
                    [4] => Data19
                    [5] => Data20
                    [6] => Data21
                )
        
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-11
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          相关资源
          最近更新 更多