我有一个文本文件:' 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
)
).....
感谢。
答案 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;
}
<强>算法:强>
创建一个名为$result
的空数组。
$result = array();
使用$lines
循环遍历文本文件的每一行,即foreach
,然后执行第3步到第5步。
foreach($lines as $line){
...
}
分解每一行,即$line
,以获取所有三个组件,例如电子邮件,总数。书籍和总书籍在数组即$components
中,如下所示:
Array
(
[0] => abcd@yahoo.com
[1] => 1
[2] => 20.30
)
此步骤由以下声明
执行$components = explode(":", $line);
分解$components[0]
字符串以获取阵列中所有与域相关的组件,例如用户名和域名,即$domain
,像这样:
Array
(
[0] => abcd
[1] => yahoo.com
)
此步骤由以下声明
执行$domain = explode("@", $components[0]);
现在使用域名yahoo.com
作为$result
数组中的键,并相应地附加$components
数组。
$result[$domain[1]][] = $components;
最后返回$result
数组。
return $result;
以下是必要的参考资料: