-1

$front->getRequest()->getParams()用来获取 url 参数。他们看起来像这样

Zend_Debug::dump($front->getRequest()->getParams());

array(4) {
  ["id"] => string(7) "3532231"
  ["module"] => string(7) "test"
  ["controller"] => string(6) "index"
  ["action"] => string(5) "index"
}

我有兴趣preg_match_all通过使用一些类似于([\s0-9])+

出于某种原因,我无法隔离该号码。

数组中可能会有更多id类似的值,但preg_match_all应该在新数组中将它们还给我

有任何想法吗?

谢谢

4

3 回答 3

3

array_filter()是去这里的方式。

$array = array_filter($array, function($value) {
    return preg_match('/^[0-9]+$/',$value);
});

您可能还想用 is_numeric() 替换 preg_match() 以提高性能。

$array = array_filter($array, function($value) {
    return is_numeric($value);
});

那应该给出相同的结果。

于 2012-06-01T21:32:12.873 回答
2

为什么你不能捕获数组并只访问你想要的元素?

$params = $front->getRequest()->getParams();
echo $params['id'];
于 2012-06-01T21:47:51.290 回答
0

是的,您可以使用正则表达式,但非正则表达式过滤器会更有效。

不要迭代preg_match()数组中的每个元素!

is_numeric非常宽容,可能因情况而异

如果您知道要访问id元素值,只需直接访问它。

方法:(演示

$array=["id"=>"3532231","module"=>"test","controller"=>"index","action"=>"index"];

var_export(preg_grep('/^\d+$/',$array));  // use regex to check if value is fully comprised of digits
// but regex should be avoided when a non-regex method is concise and accurate
echo "\n\n";

var_export(array_filter($array,'ctype_digit'));  // ctype_digit strictly checks the string for digits-only
//  calling is_numeric() may or may not be too forgiving for your case or future readers' cases

echo "\n\n";

echo $array['id']; // this is the most logical thing to do

输出:

array (
  'id' => '3532231',
)

array (
  'id' => '3532231',
)

3532231
于 2017-11-27T03:47:27.427 回答