我有两个preg_match()调用,我想合并数组而不是替换第一个数组。我的代码到目前为止:
$arr = Array();
$string1 = "Article: graphics card";
$string2 = "Price: 300 Euro";
$regex1 = "/Article[\:] (?P<article>.*)/";
$regex2 = "/Price[\:] (?P<price>[0-9]+) Euro/";
preg_match($regex1, $string1, $arr);
//output here:
$arr['article'] = "graphics card"
$arr['price'] = null
preg_match($regex2, $string2, $arr);
//output here:
$arr['article'] = null
$arr['price'] = "300"
我怎么匹配所以我的输出将是:
$arr['article'] = "graphics card"
$arr['price'] = "300"
答案 0 :(得分:1)
您可以使用preg_replace_callback
并处理回调函数内的合并。
答案 1 :(得分:1)
如果是我,我就是这样做的,这样可以在以后更容易扩展,并避免使用回调函数。它还可以通过用单数字符串var替换$strs[$key]
和$strs
数组来轻松搜索一个字符串。它不会删除数字键,但如果您只是从数组中访问关联键,这将永远不会导致问题。
$strs = array();
$strs[] = "Article: graphics card";
$strs[] = "Price: 300 Euro";
$regs = array();
$regs[] = "/Article[\:] (?P<article>.*)/";
$regs[] = "/Price[\:] (?P<price>[0-9]+) Euro/";
$a = array();
foreach( $regs as $key => $reg ){
if ( preg_match($reg, $strs[$key], $b) ) {
$a += $b;
}
}
print_r($a);
/*
Array
(
[0] => Article: graphics card
[article] => graphics card
[1] => graphics card
[price] => 300
)
*/
答案 2 :(得分:0)
如果将结果存储在两个不同的数组中,则可以使用array_merge。 但是上面描述的输出不正确。如果您在字符串中使用regex1进行搜索,但只有$ arr ['article'],则您没有$ arr ['price']。同样适用于第二个preg_match。 这意味着如果您将一个结果存储在$ arr中,而将一个结果存储在$ arr2中,则可以将它们合并到一个数组中。
preg_match本身不提供功能。
答案 3 :(得分:0)
$arr2
$arr2
移至$key => $value
。$arr[$key]
和$arr2[$key]
中选择非空值,并将该值写入$arr[$key]
。$arr
将需要合并数组。 答案 4 :(得分:-1)
这适用于您的示例:
array_merge( // selfexplanatory
array_filter( preg_match($regex1, $string1, $arr)?$arr:array() ), //removes null values
array_filter( preg_match($regex2, $string2, $arr)?$arr:array() )
);