2012-03-26 16 views
0

キーを持つすべての要素が指定されるように配列をフィルタリングする方法を探しています。キーが指定されているすべての要素が削除されるようなフィルタ配列

は、ここで私が何を意味するかの例です:

remove_elements_with_key_specified($x)
$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 
); 

...

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

あなたの要素のすべてが暗黙の数字キーを持っているので、Iあなたがここでやりたいことは、次のようなものだと思います。

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

これでうまくいくはずです。

+0

'is_numeric'は、数値文字列と浮動小数点数に対してtrueを返します。これは配列キーであってはなりません。 –

+0

真実ですが、この場合、これはそのトリックです。しかし、そうです、is_intはうまくいくでしょう。 – Ronan

関連する問題