2012-03-01 8 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); 

あなたはあなたの新しい変数名を表示するには

echo '<pre>'; 
     var_export(array_diff(get_defined_vars(), array(array()))); 
    echo'</pre>'; 

を使用し、その後PHP Extract()

extract($your_array, EXTR_PREFIX_ALL, 'prefix_if_needed');

それらを抽出することができ

$data = array(
    0 => array(
     'Data1' => 'x', 
     'Data2' => 'y', 
     'Data3' => 'z', 
    ), 
    1 => array(
     'Data1' => 'p', 
     'Data2' => 'q', 
     'Data3' => 'r', 
    ), 
); 
-1

になります。)

希望THI助けてください。

関連する問題