如何在php中爆炸成命名变量数组?

时间:2012-03-01 18:00:25

标签: php arrays multidimensional-array explode

我开始使用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'];

3 个答案:

答案 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>'; 

查看新的变量名称;)

希望这有帮助。