我想将文本文件输入转换为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代码。
非常感谢。
答案 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);
?>