将数组简化为“命名”键

时间:2009-09-05 07:12:22

标签: php arrays

我想要一个提示或更好的解决方案:

我对网址进行常规表达匹配,例如'/ product / 100 /'

preg_match('/^\/(?<name>\w+)\/(?<digit>\d+)\/$/', '/product/100/', $matches);

结果我在$matches上得到以下数组:

array
  0 => string '/product/100/' (length=13)
  'name' => string 'product' (length=7)
  1 => string 'product' (length=7)
  'digit' => string '100' (length=3)
  2 => string '100' (length=3)

我如何使用reduce this array来获取它?

array
  'name' => string 'product' (length=7)
  'digit' => string '100' (length=3)

在我得到匹配的表达式之后,我调用一个函数并将'named'键作为函数的参数。

call_user_func_array($view, $just_named_args_no_integer_keys);

我希望任何人都可以给我任何暗示。

最好的问候

1 个答案:

答案 0 :(得分:2)

只需运行从array_keys()到array_filter()的键:

/* This is for PHP 5.3, I'm sure you'll figure out how to the same thing pre 5.3 :) */

$allKeys = array_keys($view);
$namedKeys = array_filter($allKeys, function($value) { return !is_numeric($value); });

<强>更新

没有正确阅读问题。在这种情况下,实际上只是预测数据:

$namedValues = array();
foreach ($view as $key => $value)
    if (!is_numeric($key))
        $namedValues[$key] = $value;