为了账号安全,请及时绑定邮箱和手机立即绑定

水平分解索引数组数据

水平分解索引数组数据

PHP
素胚勾勒不出你 2023-07-30 13:49:43
导入数据后,我想水平分解每个子数组的数据,以空格作为分隔符。每行的部分可能在数量上有所不同。我的数据:#ORGNR   "123" 1#ACCOUNT    1010    "Kassa"#ACCOUNT    1050    "Bank"#IB     -1 1010        1923.15#IB     1 1050         201.42我的脚本:$array = file('data.txt');print_r($array);结果:Array(    [0] => #ORGNR   "123" 1    [1] => #ACCOUNT 1010    "Kassa"    [2] => #ACCOUNT 1050    "Bank"    [3] => #IB     -1 1010        1923.15    [4] => #IB     1 1050         201.42)想要的结果(仅显示第一行)Array(    [0] => [0 => #ORGNR, 1 => "123",2 => 1]    // Line 2    // Line 3    // Line 4    // Line 5)
查看完整描述

4 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

我相信最好的方法是 preg_split 而不是explode,因为它会处理额外的空间。


$str = '#ORGNR   "123" 1

#ACCOUNT    1010    "Kassa"

#ACCOUNT    1050    "Bank"

#IB     -1 1010        1923.15

#IB     1 1050         201.42';


$arr = explode("\n", $str); // you use file but it's the same thing


foreach($arr as &$val){

    $val = preg_split("/\s+/", $val);

}


var_dump($arr);

上面的输出:


array(5) {

  [0]=>

  array(3) {

    [0]=>

    string(6) "#ORGNR"

    [1]=>

    string(5) ""123""

    [2]=>

    string(1) "1"

  }

  [1]=>

  array(3) {

    [0]=>

    string(8) "#ACCOUNT"

    [1]=>

    string(4) "1010"

    [2]=>

    string(7) ""Kassa""

  }

  [2]=>

  array(3) {

    [0]=>

    string(8) "#ACCOUNT"

    [1]=>

    string(4) "1050"

    [2]=>

    string(6) ""Bank""

  }

  [3]=>

  array(4) {

    [0]=>

    string(3) "#IB"

    [1]=>

    string(2) "-1"

    [2]=>

    string(4) "1010"

    [3]=>

    string(7) "1923.15"

  }

  [4]=>

  &array(4) {

    [0]=>

    string(3) "#IB"

    [1]=>

    string(1) "1"

    [2]=>

    string(4) "1050"

    [3]=>

    string(6) "201.42"

  }

}

https://3v4l.org/9hPVd


查看完整回答
反对 回复 2023-07-30
?
www说

TA贡献1775条经验 获得超8个赞

$string = '#ORGNR   "123" 1

#ACCOUNT    1010    "Kassa"

#ACCOUNT    1050    "Bank"

#IB     -1 1010        1923.15

#IB     1 1050         201.42';


$result = explode(PHP_EOL, $string);

foreach ($result as $k => $v) {

    $result[$k] = preg_split('/\s+/', trim($v));

}


echo '<pre>';

print_r($result);  

或者


$string = '#ORGNR   "123" 1

#ACCOUNT    1010    "Kassa"

#ACCOUNT    1050    "Bank"

#IB     -1 1010        1923.15

#IB     1 1050         201.42';

echo($string);

$result = explode(PHP_EOL, $string);

foreach ($result as $k => $v) {

    $result[$k] = explode(' ', trim(preg_replace('/\s+/', ' ', $v)));

}


echo '<pre>';

print_r($result);

结果


[

    [0] => 'Array',

    [

        [0] => '#ORGNR',

        [1] => '"123"',

        [2] => '1',

    ]


    [1] => 'Array',

    [

        [0] => '#ACCOUNT',

        [1] => '1010',

        [2] => '"Kassa"',

    ]


    [2] => 'Array',

    [

        [0] => '#ACCOUNT',

        [1] => '1050',

        [2] => '"Bank"',

    ]


    [3] => 'Array',

    [

        [0] => '#IB',

        [1] => '-1',

        [2] => '1010',

        [3] => '1923.15',

    ]


    [4] => 'Array',

    [

        [0] => '#IB',

        [1] => '1',

        [2] => '1050',

        [3] => '201.42',

    ]

]


查看完整回答
反对 回复 2023-07-30
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

如果我正确理解了这个问题,这就是你想做的。


$dataAsArray = file('data.txt');

$result = [];

foreach ($dataAsArray as $data) {

    $result[] = explode(' ', $data);

}


var_dump($result);


查看完整回答
反对 回复 2023-07-30
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

使用array_map简洁


<?php


$str = '#ORGNR   "123" 1

#ACCOUNT    1010    "Kassa"

#ACCOUNT    1050    "Bank"

#IB     -1 1010        1923.15

#IB     1 1050         201.42';


$arr2 = array_map(function($line){

    return preg_split("/\s+/", $line);

}, explode("\n", $str));


var_dump($arr2);

将给出相同的正确输出: https: //3v4l.org/20cLd


查看完整回答
反对 回复 2023-07-30
  • 4 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信