array_walk - 对>数值数组成为单词

时间:2017-04-21 16:06:01

标签: php arrays

所以我正在使用下一件事:

    Array
(
    [1] => NEAMT
    [2] => ROMEDC ALEXANDRE
    [3] => COMENKA
    [4] => EXAMMS RANTEM
    [5] => 6
)
输出将是:

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

主要问题是$ string每次都不同,并且可以包含不同的参数,例如'SAT'可能根本不会出现在另一个字符串中,因为它被'SECTOR'取代。

所有这些都是本地化词语,如门牌号码('NR。')或城镇名称('JUD')。

我想要的是将上面的数组转换成这样的:

{{1}}

我希望你明白这个想法:

我从一个字符串'地址'得到不同的参数,如公寓号,建筑物编号等(这取决于每次客户 - 他可能住在一所房子,所以没有公寓号)所以有数组中的单词而不是数字将帮助我在不同的列中输出信息。

欢迎任何想法。

谢谢。

1 个答案:

答案 0 :(得分: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
)

到罗马的快车道......