1

我有两个 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"

?

4

5 回答 5

1

您可以preg_replace_callback在回调函数中使用和处理合并。

于 2012-10-17T07:58:07.020 回答
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
)
*/
于 2012-10-17T08:16:54.477 回答
0

如果将结果存储在两个不同的数组中,则可以为此使用array_merge 。但是您上面描述的输出不正确。如果您在字符串中使用 regex1 进行搜索,则没有 $arr['price'],而只有 $arr['article']。同样适用于第二个 preg_match。这意味着如果您将一个结果存储在 $arr 中,将一个结果存储在 $arr2 中,您可以将它们合并到一个数组中。

preg_match 本身不提供功能。

于 2012-10-17T07:45:02.673 回答
0
  1. 对第二个 preg_match 使用不同的数组,比如说 $arr2
  2. 遍历$arr2$key => $value
  3. $arr[$key]从和中选择非空值 $arr2[$key],并将该值写入$arr[$key]
  4. $arr将需要合并数组。
于 2012-10-17T07:55:38.653 回答
-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() ) 
  );
于 2012-10-17T07:44:18.277 回答