Фильтровать массив, чтобы удалить все элементы с ключом - PullRequest
0 голосов
/ 27 марта 2012

Я ищу способ фильтрации массива, чтобы все элементы с указанным ключом были удалены.

Вот пример того, что я имею в виду:

$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 ]

1 голос
/ 27 марта 2012

Все ваши элементы имеют неявный цифровой ключ, поэтому я думаю, что вы хотите сделать здесь что-то вроде:

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

Это должно сработать.

1 голос
/ 27 марта 2012

is_int() будет работать:

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

Из документов:

<?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)
...