2017-04-06 88 views
1

是否有可能在PHP此類數據轉換數據到相關聯的陣列的PHP

ABANO TERME A001 
ABBADIA CERRETO A004 
ABBADIA LARIANA A005 
ABBADIA SAN SALVATORE A006 
ABBASANTA A007 
ABBATEGGIO A008 
ABBIATEGRASSO A010 

的轉換爲相關聯的陣列,其中在第一列是鍵和在第二列是值?

+3

是。數據從哪裏來,到目前爲止你有什麼? – jeroen

+0

它是字符串還是什麼樣的數據? – Gaurav

+0

你的意思是'$ myArr [「ABETONE」] =「A012」;'? – JustCarty

回答

2
$handle = fopen(path\to\file\filename, "r"); 
$result_arr = array(); 
while(($filesop = fgets($handle)) !== false) 
{ 
    $line_arr = explode(" ", $filesop); 
    $value = end($line_arr); 
    unset($line_arr[array_search($value, $line_arr)]); 
    $key = implode(" ", $line_arr); 
    $result_arr[trim($key] = trim($value); 
} 
print_r($result_arr); 

商店在這樣的文本文件(用逗號隔開):

ABANO TERME,A001 
ABBADIA CERRETO,A004 
ABBADIA LARIANA,A005 
ABBADIA SAN SALVATORE,A006 
ABBASANTA,A007 
ABBATEGGIO,A008 
ABBIATEGRASSO,A010 

解決方案來讀取文件:

$handle = fopen(path\to\file\filename, "r"); 
$result_arr = array(); 
while(($filesop = fgets($handle)) !== false) 
{ 
    $line_arr = explode(",", $filesop); 
    $value = end($line_arr); 
    unset($line_arr[array_search($value, $line_arr)]); 
    $key = implode(",", $line_arr); 
    $result_arr[trim($key] = trim($value); 
} 
print_r($result_arr); 
+0

我更新了我的問題,因爲我的數據可能如我現在所示,但如果我用空間爆炸,他們被誤解@Ju​​stCarty – bsh

+0

@Gaurav它會引發錯誤:未定義的偏移量:0。遺憾但我在PHP – bsh

+0

@Gaurav陣列初學者([ABANO] => TERME \t A001 [阿巴迪亞] => LARIANA \t A005 [阿巴迪亞SAN] => SALVATORE \t A006 [] =>尊格里\t M204 [ACI] => SANT'ANTONIO \t A029 [ACQUANEGRA] 這是輸出仍然被誤解:( – bsh

1

對於該特定數據的一種解決辦法是:

<?php 

$data = file_get_contents('data.txt') 

//use regular expressions to parse whole file at once 
preg_match_all("/([^\s]+\s?[^\s]+?)\s+(.\d+)$/m", $data, $m); 

//and combine results from result array ($m) 
//first entry - $m[0] contains whole lines thats why I dont use it here 
//second entry - $m[1] - data from first brackets is an array key 
//third entry - $m[2] - is a value (both are separated by some number of spaces - \s+) 
$array = array_combine($m[1], $m[2]); 

print_r($array); 

?> 

輸出:

Array 
(
    [ABETONE] => A012 
    [ABRIOLA] => A013 
    [ACATE] => A014 
    [ACCADIA] => A015 
) 
當然

,如上述的同事所指出的,這依賴於在數據的來源,並且如果該特定集是有代表性的。

+0

我有情況下,當密鑰是兩個詞,如: 阿誇維瓦科萊克羅切\t A050 阿誇維瓦迪塞爾尼亞\t A051 在這種情況下,鍵和值被曲解了。這可以解決嗎? – bsh

+0

我已更新與空間工作的答案 – Deus777

2
$txt = file_get_contents('foo.txt'); 
    $arr=array_values(array_filter(explode(' ',$txt))); 
    $new=[]; 
    for($i=0; $i<count($arr)-1;$i++){ 

    $new[$arr[$i]]=$arr[++$i]; 
    } 

    print_r($new);