2012-03-01 1 views
1

Я начинаю с php, и мне было интересно, возможно ли взорвать строку в массив с именованными переменными. Настройка состоит в том, что у меня есть некоторые данные, которые я читаю из текстового файла, и сначала хочу разбить его на строки, а затем разбить на отдельные части данных.как взорваться в именованный массив переменных в 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'];

+2

Посмотрите на ассоциативные массивы. –

+0

нет встроенной функции, но вы можете сделать это вручную. Что вы сделали до сих пор? –

+0

Какова структура данных в файле? У вас есть некоторые параметры, такие как хранение данных уже разборным способом, например JSON/XML, или анализ его с помощью регулярных выражений и взрывов. – Alex

ответ

3

Если вы хотите взорвать строку в ассоциативный массив, вы можете использовать функцию списка.

// 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 будет содержать все данные.

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', 
    ), 
); 
-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>'; 

Чтобы увидеть новые имена переменных;)

Надежда Тхи s помогает.