2012-03-26 38 views
0

我正在尋找一種方法來過濾數組,所以指定的所有元素都被刪除。過濾器數組,所以指定的所有元素被指定被刪除

這裏是我的意思的例子:

$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) { } 
} 

怎麼辦呢?簡單的檢查一下,鍵是一個字符串將是最好的方式?

回答

1

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) 
1

您所有的元素都具有隱含的數字鍵,所以我猜你想在這裏做什麼是這樣的:

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

這應該有效。

+0

'is_numeric'對數字字符串以及浮點數返回true,數組鍵不應該是數組鍵。 – 2012-03-26 21:19:28

+0

不錯,但是在這種情況下,這可以做到這一點。但是,對,is_int會更好。 – Ronan 2012-03-26 21:22:44

相關問題