过滤数组,以便删除指定了所有带键的元素

时间:2012-03-26 21:11:03

标签: php arrays filter associative-array

我正在寻找一种过滤数组的方法,以便删除所有指定了key的元素。

这是我的意思的一个例子:

$x = array(
    'a', // pass
    'b::a', // pass
    array('a'), // pass
    array('a', 'b'), // pass
    function() { // pass

        return 'a';

    },
    'a' => 'b', // doesn't pass because key is specified
);

remove_elements_with_key_specified($x)之后...

array(5) {
    [0]=> string(1) "a"
    [1]=> string(4) "b::a"
    [2]=> array(1) { [0]=> string(1) "a" }
    [3]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" }
    [4]=> object(Closure)#1 (0) { }
}

怎么做?如果简单检查密钥是字符串是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

is_int()可行:

foreach($x as $k=>$v){
    if(!is_int($k)){
        unset($x[$k]);
    }
}

来自docs:

<?php
if (is_int(23)) {
    echo "is integer\n";
} else {
    echo "is not an integer\n";
}
var_dump(is_int(23));
var_dump(is_int("23"));
var_dump(is_int(23.5));
var_dump(is_int(true));
?>

以上示例将输出:

is integer
bool(true)
bool(false)
bool(false)
bool(false)

答案 1 :(得分:1)

你的所有元素都有一个隐含的数字键,所以我想你想做的是:

foreach($x as $key => $value) {
    if(!is_numeric($key) {
         unset($x[$key]);
    }
}

这应该有效。