2009-07-16 4 views

答えて

1

IS_ARRAYであるかどうかを示すブール値を返す関数と命名IS_ARRAY($のVAR)を有する - 変数が配列

http://uk.php.net/is_array

であるか否かを検索し
0

私は人々が複数の配列チェックを使用している場合、私はより良い解決策を持っていると思うので、ここでは遅い答えを追加しています。

単純に1つの配列をチェックしている場合は、PHPのis_array()を使用するとうまく動作します。

if ((array) $users !== $users) { 
    // is not an array 
} else { 
    // is an array 
} 

PROOF

: - 例えばループ内 - あなたが複数のアレイをチェックしている場合

if (is_array($users)) { 
    is an array 
} else { 
    is not an array 
} 

しかし、このためのより良いパフォーマンスのソリューションは、キャストを使用して、そこにあります

あなたはこのパフォーマンス・テストを実行する場合は、かなりの性能差が表示されます:

<?php 

$count = 1000000; 

$test = array('im', 'an', 'array'); 
$test2 = 'im not an array'; 
$test3 = (object) array('im' => 'not', 'going' => 'to be', 'an' => 'array'); 
$test4 = 42; 
// Set this now so the first for loop doesn't do the extra work. 
$i = $start_time = $end_time = 0; 

$start_time = microtime(true); 
for ($i = 0; $i < $count; $i++) { 
    if (!is_array($test) || is_array($test2) || is_array($test3) || is_array($test4)) { 
     echo 'error'; 
     break; 
    } 
} 
$end_time = microtime(true); 
echo 'is_array : '.($end_time - $start_time)."\n"; 

$start_time = microtime(true); 
for ($i = 0; $i < $count; $i++) { 
    if (!(array) $test === $test || (array) $test2 === $test2 || (array) $test3 === $test3 || (array) $test4 === $test4) { 
     echo 'error'; 
     break; 
    } 
} 
$end_time = microtime(true); 
echo 'cast, === : '.($end_time - $start_time)."\n"; 

echo "\nTested $count iterations." 

?> 

RESULT

is_array : 7.9920151233673 
cast, === : 1.8978719711304 
+0

申し訳ありませんが、私は 'is_array'に固執します。 **それは何をしているのかを非常に正確に記述しています。**単一の呼び出しで保存する数マイクロ秒は、ソースコード難読化の価値はありません。あなたがここでやろうとしていたあなたの頭のWTFを傷つけるでしょう。 – deceze

関連する問題