我开始使用php,我想知道是否有可能将字符串分解为带有命名变量的数组。设置是我从文本文件中读取了一些数据,我想首先将其分解为行,然后将其分解为单独的数据。
Data1 | Data2 | Data3 |
----------------------------
| x | y | z |
| p | q | r |
所以我想尝试最终的结果:
data {
row1 {
data1: x
data2: y
data3: z
row2 {
data1: p
data2: q
data3: r
}
}
如果可能的话,我希望能够使用变量的名称访问数据:
$r1d1 = data[row1]['data1'];
答案 0 :(得分:3)
如果要将字符串分解为关联数组,可以使用list函数。
// Initialize data_list
$data_list = array();
// Remove delimiter at start and end of string
$string = trim('| x | y | z |', '|');
$data = array();
list($data['data1'],$data['data2'],$data['data3']) = explode('|',$string);
$data_list[] = $data;
您可能希望将其包装到foreach循环中以处理文件的每一行。最后,$ data_list将包含所有数据。
答案 1 :(得分:0)
按代码解释
<?php
// data to convert
$string = '| Data1 | Data2 | Data3 |
----------------------------
| x | y | z |
| p | q | r |';
// container to collect data in
$data = array();
// split the string into lines
$lines = explode("\n", $string);
// pull first line from the array
$names = array_shift($lines);
// remove delimiters from beginning and end
$names = trim($names, '| ');
// split at | while ignoring spaces and empty results
$names = preg_split('/\s*\|\s*/', $names);
// remove --------------- line
array_shift($lines);
// walk remaining lines
foreach ($lines as $line) {
// container to collect data of row in
$row = array();
// remove delimiters from beginning and end
$line = trim($line, '| ');
// split at |
$line = explode('|', $line);
foreach ($line as $i => $value) {
// identify key by looking up in $names
$key = $names[$i];
// remove spaces
$row[$key] = trim($value);
}
// add row to data set
$data[] = $row;
}
var_dump($data);
将导致
$data = array(
0 => array(
'Data1' => 'x',
'Data2' => 'y',
'Data3' => 'z',
),
1 => array(
'Data1' => 'p',
'Data2' => 'q',
'Data3' => 'r',
),
);
答案 2 :(得分:-1)
您可以提取它们PHP Extract()
extract($your_array, EXTR_PREFIX_ALL, 'prefix_if_needed');
然后使用
echo '<pre>';
var_export(array_diff(get_defined_vars(), array(array())));
echo'</pre>';
查看新的变量名称;)
希望这有帮助。