2017-04-06 85 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);