我的文件有很多行(超过32k)。行看起来像:
34 Item
5423 11Item
44 Item
第一个数字是ID。我想要make assoc。数组:数组(“34”=>“项目”,“5423”=>“11项目”,“44”=>“项目”)
因此,主要鸿沟是空间或一定数量。使用PHP。
答案 0 :(得分:1)
这是一种不检查数据有效性但可能有效的方法。它根据空间爆炸每一行,并将结果放入$res
关联数组中
有关信息,preg_split()
允许使用正则表达式拆分字符串。
$res = array();
foreach($lines as $line) {
$data = preg_split('/\s+/', $line);
$res[$data[0]] = $data[1];
}
如果您确实想检查条件,可以添加一些if
语句,ID限制为:
$res = array();
foreach($lines as $line) {
$data = preg_split('/\s+/', $line);
$idx = intval($data[0]);
if($idx > 0 && $idx < 65366) // skip lines where the ID seems invalid
$res[$data[0]] = $data[1];
}
答案 1 :(得分:1)
将preg_match
与命名捕获组一起使用:
preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
$matches['id']
将包含ID,$matches['name']
将包含该名称。
while (/* get each row */) {
preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
$id = $matches['id'];
$name = $matches['name'];
if ($id > 1 && $id < 65366) {
$arr[$id] = $name;
}
}
print_r($arr);
示例输出:
Array
(
[34] => Item
[5423] => 11Item
[44] => Item
[3470] => BLABLA TEF2200
)
答案 2 :(得分:1)
您可以使用:
$data = <<<'LOD'
34 Item
5423 11Item
44 Item
546
65535 toto le héros
65536 belzebuth
glups glips
LOD;
$result = array();
$line = strtok($data, "\r\n");
while($line!==false) {
$tmp = preg_split('~\s+~', $line, 2, PREG_SPLIT_NO_EMPTY);
if (count($tmp)==2 && $tmp[0]==(string)(int)$tmp[0] && $tmp[0]<65536)
$result[$tmp[0]] = $tmp[1];
$line = strtok("\r\n");
}
print_r($result);
答案 3 :(得分:0)