【问题标题】:txt file into array with delimiters in phptxt 文件到 php 中带有分隔符的数组中
【发布时间】:2013-04-03 00:08:00
【问题描述】:

我的ips.txt 文件包含以下内容:

radie1230: 116.79.254.131
Y_O_L_O: 122.149.157.42
midgetman63: 121.121.14.101, 124.112.115.69, 114.182.51.1, 114.118.55.131, 111.21.22.156
kypero: 121.211.61.118, 117.117.117.46, 121.214.109.247, 111.219.37.75
lythorous: 111.161.225.214, 12.111.184.71, 1.112.201.113, 11.137.214.184, 1.115.21.117, 12.115.241.212, 11.117.116.217

此列表包含左侧的用户名,以: 与右侧的 IP 分隔。 IP 以, 分隔。

创建以下输出的实现方式是什么?

Array (
    [midgetman63] => Array
        (
            [0] => 121.121.14.101
            [1] => 124.112.115.69
            [2] => 114.182.51.1
            [3] => 114.118.55.131
            [4] => 111.21.22.156
        )
)

【问题讨论】:

  • 你试过什么?只是你可以从尝试开始。逐行读取文件,用:分隔符分解每一行,然后使用结果数组的第一个索引作为键,例如midgetman63,然后用 , 分隔符分解第二个索引(为 1).. 你几乎完成了..
  • 你可以找到你正在搜索的文本所在的行,然后 $d = explode(':', $thatdata); $s = 爆炸(',', $d); foreach $s as $i { array_push($output, $i); }
  • 是的,我已经尝试过了,但并没有走得太远,最终得到了空白数组。但是现在我正在使用下面的 Gonzalo Bahamedez 的方法,效果很好。不过感谢您的帮助。

标签: php arrays file text split


【解决方案1】:

试试这个:

$dataFromFile = file('ips.txt');
$dataFromFile = array_map('trim', $dataFromFile);
$result = array();
foreach ($dataFromFile as $line) {
    list($user, $ips) = explode(':', $line, 2);
    $arrayOfIPs = explode(',', $ips);
    $result[trim($user)] = array_map('trim', $arrayOfIPs);
}

var_dump($result);

【讨论】:

  • 或者是的,这比我的答案要好得多
  • 我只是在想,你不应该将explode(':', $line); 更改为explode(':', $line, 2);,这样IPv6 IP 仍然可以使用吗?
  • 我在下面使用 Gonzalo Bahamedez 的方法,效果很好。不过感谢您的帮助。
【解决方案2】:

如果您在文本文件的末尾没有空格,这应该可以。 祝你好运。

$text = file_get_contents("ipsontext.txt");
$array = explode("\n",$text);
$finally_array = array();
foreach ($array as $key => $value) {
  $this_key = explode(":",$value);
  $this_values = explode(",",$this_key[1]);
   foreach($this_values as $tv) {
       $finally_array[$this_key[0]][] = $tv;
     }  
 }
 var_dump($finally_array);

【讨论】:

  • 没问题,但我之前没有读过 mkjasinski 的回答,我的回答是,她的方法更快,两行代码更短。 :) 我猜。
【解决方案3】:

也许是这个?

<?php
$output = array();
$search = 'something';
$lines = file('file.txt');
foreach($lines as $line) {
  if(strpos($line, $search) !== false) {
    $d = explode(':', $line); 
    $s = explode(',', $d[1]); 
    foreach $s as $i { array_push($output, $i); }
  }
}

print_r($output);

?>

【讨论】:

  • 我在下面使用 Gonzalo Bahamedez 的方法,效果很好。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多