如何从文件列表中创建数组

时间:2014-05-26 07:40:48

标签: php arrays file

我有一个文本文件countries.txt,其中包含所有国家/地区的列表:

1. Australia
2. Austria
3. Belgium
4. US

我想在country_handler.php中创建一个像这样的数组:

$countries = array(
     '1'=>'Australia',
     '2'=>'Austria',
     '3'=>'Belgium',
     '4'=>'US'
); 

怎么做?

6 个答案:

答案 0 :(得分:1)

最好你可以在下面这样的函数中使用它 - 然后从任何地方调用这个函数

function getCountryList() { return array( '1'=>'Australia', '2'=>'Austria', '3'=>'Belgium', '4'=>'US' ); }

答案 1 :(得分:0)

$data = file_get_contents('countries.txt');
$countries = explode(PHP_EOL, $data);

答案 2 :(得分:0)

$file = file('countries.txt');

$countries = array();

foreach ($file as $line) {
    @list ($index, $country) = explode('.', $line);
    $countries[trim($index)] = trim($country);
}

print_r($countries);

答案 3 :(得分:0)

$lines = file('countries.txt');

$newArr = array();
foreach ($lines as $line) {
    $erg = preg_split('/\.\s+/', $line);
    $newArr[$erg[0]] = $erg[1];  
}
var_dump($newArr);

答案 4 :(得分:0)

幸运的是(有时候)正则表达式不包含.中的换行符,所以你可以这样做:

$contents = file_get_contents('countries.txt');
preg_match_all('#(\d+)\.\s+(.+)#', $contents, $matches);
print_r($matches);

正则表达式意味着:

  • (\d+) - 一个数字(另存)
  • \. - 一个文字点
  • \s+ - 空格
  • (.+) - 除\n\r之外的任何字符(行尾)(另存为)

结果是:

Array
(
    [0] => Array
        (
            [0] => 1. Australia
            [1] => 2. Austria
            [2] => 3. Belgium
            [3] => 4. US
        )

    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [2] => Array
        (
            [0] => Australia
            [1] => Austria
            [2] => Belgium
            [3] => US
        )

)

我确信[1][2]您可以制作所需的键控数组。

array_combine轻松救援:

$countries = array_combine($matches[1], $matches[2]);

答案 5 :(得分:0)

试试这个:

<?php
    $data = file_get_contents('countries.txt');
    $countries = explode(PHP_EOL,$data);               
    $cnt = 1;
    foreach($countries as $val) {
      if($val <>"") {
         $res[$cnt] = strstr(trim($val), ' ');
         $cnt++;
      }
    }
    print_r($res);
    ?>