我猜这个标题非常抽象。
所以我有一些包含地址的数组(这是一个例子):
array(4) { ["cod"]=> int(200) ["message"]=> string(7) "SUCCESS" ["found"]=> array(1) { [0]=> array(8) { ["cui"]=> int(655485) ["data"]=> string(10) "2017-04-21" ["name"]=> string(13) "Example SA" ["address"]=> string(64) "JUD. NEAMT, SAT ROMEDC ALEXANDRE COM. COMENKA, STR. EXAMMS RANTEM, NR.6" ["tva"]=> bool(true) ["data_sfarsit"]=> string(1) " " ["data_anul_imp"]=> string(1) " " ["mesaj"]=> string(31) "platitor de TVA la data cautata" } } ["notfound"]=> array(0) { } } Array ( )
所以我想要的是从['地址'],JUD之后的单词中提取。' - (那将是NEAMT
,然后我想要在' SAT'之后的单词(那将是ROMEDC ALEXANDRE
,然后我想要在' COM之后的单词。' - (那将是COMENKA
)然后我想要' STR。' - (那将是EXAMSS RANTEM
)之后的单词。
基本上,来自地址'字符串,我想把每个信息放在不同的列中(STR是街道,NR。是房子的号码,SAT是村庄/镇)
此外,'地址'每次会有不同的字符串,例如' BL。' (建筑物)或' AP。' - 公寓号码(并非所有地址都有AP号码)。
我怎样才能实现我想要的目标?谢谢。
答案 0 :(得分:1)
希望这会帮助你..
<?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*)/", $string);
array_walk($result,function($value,$key) use (&$result){
if(stristr($value, ","))
{
$result[$key]=explode(",", $value)[0];
}
});
print_r(array_filter($result));
答案 1 :(得分:0)
$str = "JUD. NEAMT, SAT ROMEDC ALEXANDRE COM. COMENKA, STR. EXAMMS RANTEM, NR.6";
$JUD = substr($str, strpos($str, "JUD. "), strpos($str, ", SAT") );
$SAT = substr($str, strpos($str, ", SAT "), strpos($str, ", STR.") );
$STR = substr($str, strpos($str, ", STR. "), strlen($str) );
答案 2 :(得分:0)
我想更多地了解您输入的可能变化。请扩展您的问题以包括4或5种不同的可能性,以便我可以测试/改进我的过程。
输入:
$string='JUD. NEAMT, SAT ROMEDC ALEXANDRE COM. COMENKA, STR. EXAMMS RANTEM, NR.6';
方法(Demo):
$all_markers=['JUD.','SAT','COM.','STR.','NR.','BL.','AP.']; // list all possible markers
$escaped_markers=preg_replace('/\./','\.',$all_markers); // prepare dots for regex pattern
$pattern='/(?<= |^)(?:'.implode(' ?|',$escaped_markers); // declare all markers as match start points
$pattern.=' ?).*?(?= '.implode('| ',$escaped_markers).'|$|,)/'; // declare all match end points
if(preg_match_all($pattern,$string,$out)){
foreach($out[0] as $pair){
list($key,$val)=preg_split('/(?:'.implode('|',$escaped_markers).')\K ?/',$pair,2);
$result[$key]=$val;
}
$desired_markers=['JUD.'=>'','SAT'=>'','COM.'=>'','STR.'=>'']; // list as keys the marker=>data you want
$result=array_intersect_key($result,$desired_markers); // filter out undesired marker=>data
var_export($result);
}else{
echo '$pattern failed';
}
输出:
array (
'JUD.' => 'NEAMT',
'SAT' => 'ROMEDC ALEXANDRE',
'COM.' => 'COMENKA',
'STR.' => 'EXAMMS RANTEM',
)
因为您说字符串中的所需值可以按任何顺序排列,所以必须捕获关键字/标记,以便您可以准确地将值与其标记相关联。这不是真的吗?