过滤数组,以便只保留以指定字符串开头的键

时间:2012-12-17 12:55:23

标签: php arrays filter callback

我有一个带有几个键的数组,我正在寻找一个回调来摆脱所有不符合某个标准的键(从'电子邮件'开始这种情况)。

我一直在关注array_walk(),但无论如何,输出始终为1。我猜这个功能不适合这个任务,所以有人知道更好的方法吗?感谢。

$test = array_walk($args, '_check_key_start_callback', 'email');

function _check_key_start_callback(&$value, $key, $str){

    return strncmp($key, $str, strlen($str));

}

3 个答案:

答案 0 :(得分:0)

您必须使用 array_map()而不是 array_walk() ......

答案 1 :(得分:0)

我会这样做,使用array_keys和lambda函数:

$yourArray = array(
  'email' => 'some@email.com',
  'foo' => 'bar'
);

$allowedKey = "email";

$newArray = array_filter(array_keys($yourArray), function($key) use($yourArray, $allowedKey){

  return strncmp($yourArray[$key], $allowedKey, strlen($allowedKey)) === 1;

});

无论如何,猪上的口红。

答案 2 :(得分:0)

这应该有效:

$args = array_intersect_key(
    $args,
    array_flip(array_filter(array_keys($args), function($key) {
        return preg_match('/^email/', $key);
    }))
);