PHP拆分多个字符串

时间:2016-12-11 17:53:39

标签: php

我有一个文本文件:' bookdata'具有以下结构:

abcd@yahoo.com:1:20.30
efgh@hotmail.com:4:5.05
 ...

电子邮件:总数没有。书籍:读书总数。

我的问题是使用关联数组分离各个字符串的每个部分,如下所示:

 +-----------------------------------------------+
 |                     yahoo.com                 |
 +---------------+------------------+------------+
 | abcd@yahoo.com |         1        |     20.30 |

 | efgh@yahoo.com |         4        |      5.05 |
 +---------------+------------------+------------+

到目前为止我的方法如下:

我有一个函数makeArray(),它包含读取txt文件中的数据:

public function makeArray()
{
    $readTxtData = $this->read('bookdata');
    //Get the domain from data....
    $domain = preg_split("~[A-Za-z](.*?)@~", $readTxtData);

    return $domain;
}

结果:

        Array
    (
        [0] => 
        [1] => yahoo.com:7:8.35

        [2] => hotmail.com:4:5.59
)

数组应如下所示:

 Array
(
    [yahoo.com]
        (
            [0]
                (
                    [0] => abcd@yahoo.com
                    [1] => 7
                    [2] => 8.35
                )

            [1] => Array
                (
                    [0] => efgh@yahoo.com
                    [1] => 1
                    [2] => 8.36
                )

            [2] => Array
                (
                    [0] => oyp@yahoo.com
                    [1] => 9
                    [2] => 13.42
                )
        ).....

感谢。

1 个答案:

答案 0 :(得分:0)

假设您正在阅读$readTxtData变量中的整个文本文件数据,解决方案就会出现问题,

public function makeArray(){
    $readTxtData = $this->read('bookdata');

    $lines = explode("\n", $readTxtData);
    $result = array();
    foreach($lines as $line){
        $components = explode(":", $line); 
        $domain = explode("@", $components[0]);
        $result[$domain[1]][] = $components;
    }
    return $result;
}

<强>算法:

  1. 创建一个名为$result的空数组。

    $result = array();
    
  2. 使用$lines循环遍历文本文件的每一行,即foreach,然后执行第3步到第5步。

    foreach($lines as $line){
        ...
    }
    
  3. 分解每一行,即$line,以获取所有三个组件,例如电子邮件总数。书籍总书籍在数组即$components中,如下所示:

    Array
    (
        [0] => abcd@yahoo.com
        [1] => 1
        [2] => 20.30
    )
    

    此步骤由以下声明

    执行
    $components = explode(":", $line);
    
  4. 分解$components[0]字符串以获取阵列中所有与域相关的组件,例如用户名域名,即$domain ,像这样:

    Array
    (
        [0] => abcd
        [1] => yahoo.com
    )
    

    此步骤由以下声明

    执行
    $domain = explode("@", $components[0]);
    
  5. 现在使用域名yahoo.com作为$result数组中的键,并相应地附加$components数组。

    $result[$domain[1]][] = $components;
    
  6. 最后返回$result数组。

    return $result;
    
  7. 以下是必要的参考资料: