在PHP中将文本文件输入转换为数组

时间:2016-06-11 13:56:03

标签: php arrays

我想将文本文件输入转换为PHP中的数组。

这是我的文本文件示例输入:

Name:abc
Age: 50
Address:
         Postal:123
          City:and
DOB:1/5/1996

PHP中的数组应该是(输出):

[name]->ABC
[AGE]->50
[ADDRESS][POSTAL]->123
[Address][city]=and
[DOB]=1/5/1996
[DOB][time]->8:20

Array(1)
[Name]=>ABC
[Age]=>50
[Address]==>  Array(2)
                          [City]=>and
Array(1)
[DOB]=>1/5/1996
                 Array(2)
                   [Time]=>8:20

我真的没有任何线索。请帮我获得所需的输出。用于实现此目的的PHP代码。

非常感谢。

2 个答案:

答案 0 :(得分:0)

这对你有用。(它是如何工作的,作为评论添加): -

<?php

define('CHARS',4); //constant to remind yaml spec for number of spaces.

$input = "Name:abc
Age: 50
Address:
         Postal:123
          City:and
DOB:1/5/1996";

$inarray = explode("\n",$input); // explode with new line
echo "<pre/>";print_r($inarray); // print array
$final_array = array(); // create final empty array
$child_array = ''; // an empty variable
foreach ($inarray as $key=>$inarra){ // loop iteration
    $identSize = strlen($inarra)-strlen(ltrim($inarra)); // check that original value have any spaces at thhe begning or not?
    $explode_data = explode(':',$inarra); // explode with :
    if($identSize == 0){ // if original string have no spaces at the begning
        $child_array = trim($explode_data[0]); // asssign its first value to newely created variable
        $final_array[trim($explode_data[0])] = trim($explode_data[1]); // add key value pair to final array
    }else{
        $final_array[$child_array][trim($explode_data[0])] = trim($explode_data[1]); // add key value pair as an subarray to the prevously created index which have no space at the begning
    }
}
echo "<pre/>";print_r($final_array);
?>

输出: - https://eval.in/587362

答案 1 :(得分:0)

当值为空字符串时,您需要将父键保存在某处。这样,当您按下以空字符开头的键时,可以在下一次迭代中使用它。

<?php
$input = "Name:abc
Age: 50
Address:
         Postal:123
         City:and
DOB:1/5/1996";

$values = [];
$parent_key = '';
foreach (explode("\n", $input) as $line) {
  list($key, $value) = explode(":", $line);
  if ($key[0] == ' ')
    $values[trim($parent_key)][trim($key)] = $value;
  else {
    $parent_key = $key;
    $values[trim($key)] = $value;
  }
}

print_r($values);
?>