2017-04-21 17 views
0

所以我使用的是接下來的事情:array_walk - 對>數值數組變得話

<?php 
$string='JUD. NEAMT, SAT ROMEDC ALEXANDRE COM. COMENKA, STR. EXAMMS RANTEM, NR.6'; 
$result=preg_split("/(?:JUD.\s*|\s*SAT\s*|\s*COM\.\s*|\s*STR.\s*|\s*SECTOR\s*|\s*B-DUL\s*|\s*NR\.\s*|\s*ET.\s*|\s*MUN\.\s*|\s*BL.\s*|\s*SC\.\s*|\s*AP\.\s*)/", $string); 

array_walk($result,function($value,$key) use (&$result){ 
    if(stristr($value, ",")) 
    { 
     $result[$key]=explode(",", $value)[0]; 
    } 
}); 
print_r(array_filter($result)); 

輸出將是:

Array 
(
    [1] => NEAMT 
    [2] => ROMEDC ALEXANDRE 
    [3] => COMENKA 
    [4] => EXAMMS RANTEM 
    [5] => 6 
) 

的主要問題是每一次$ string是不同的並且可以包含不同的參數,比如'SAT',可以不出現在另一個字符串中,因爲被'SECTOR'替代。

所有這些都是本地化詞彙,如房屋號碼('NR。')或城鎮名稱('JUD')。

我要的是上述陣列轉換成這樣的:

 Array 
(
    ['JUD'] => NEAMT 
    ['SAT'] => ROMEDC ALEXANDRE 
    ['COM'] => COMENKA 
    ['STR'] => EXAMMS RANTEM 
    ['NR'] => 6 
) 

我希望你有這個想法:

我從一個字符串獲得「地址」不同的參數,如公寓號碼,建築物號碼等等(每次都取決於客戶 - 他可能住在一間房子裏,因此沒有公寓號碼),因此在數組中使用單詞而不是數字可以幫助我將信息輸出到不同的列中。

任何想法是值得歡迎的。

謝謝。

回答

1
$string='JUD. NEAMT, SAT ROMEDC ALEXANDRE COM. COMENKA, STR. EXAMMS RANTEM, NR.6'; 

//fix missing commas 
$string = preg_replace('#([A-Z]+) ([A-Z]+\.)#',"$1, $2",$string); 
//a trick to fix non space on `NR.6` 
$string = str_replace(['.',' '],['. ',' '],$string); 
//get the part seperated by comma, trim to remove spaces 
$ex = array_map('trim',explode(',',$string)); 
//iterate over it 
foreach($ex as $e){ 
    //explode the part by space 
    $new = array_map('trim',explode(' ',$e)); 
    //take the first part as key, remove spaces and dot 
    $key = trim(array_shift($new),' . '); 
    //collect via key and implode rest with a space 
    $coll[$key]=implode(' ',$new); 
} 
//done 
print_r($coll); 

結果:

Array 
(
    [JUD] => NEAMT 
    [SAT] => ROMEDC ALEXANDRE 
    [COM] => COMENKA 
    [STR] => EXAMMS RANTEM 
    [NR] => 6 
) 

快車道羅馬...

+0

您的代碼幾乎工作。我在這裏遇到一些問題:https://eval.in/780354。 COM。應該是值= COMENKA的另一個數組值。與NR相同。 - > 6 – an4rei

+0

@ an4rei這比您的代碼更簡單,因此請根據您的需求進行更新。在字符串中檢測到正確的東西是很難的。我記住的規則:1.所有參賽作品必須用逗號分隔。 2.子字符串的第一部分可以用作鍵。如果規則是錯誤的,則編寫新的邏輯代碼。但保持簡單:-)'NR.6'是固定的,'COM.'需要一個像'',COM.' – JustOnUnderMillions

+0

非常感謝所有這一切。如果我無法以任何方式修改字符串。如何在'COM'前添加逗號? – an4rei