2009-07-16 4 views

ответ

3

РНР функция с именем is_array ($ Var), которая возвращает логическое значение, чтобы указать, является ли параметр массива или не http://ir.php.net/is_array

0

Я добавляю здесь более поздний ответ, так как я думаю, что у меня есть лучшее решение, если люди используют несколько проверок массива.

Если вы просто проверяете один массив, то использование PHP is_array() делает работу просто прекрасной.

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

Однако, если вы проверяете несколько массивов - в цикле, например, - то есть гораздо лучшее решение, исполнительская для этого, используя бросок:

if ((array) $users !== $users) { 
    // is not an array 
} else { 
    // is 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." 

?> 

РЕЗУЛЬТАТ

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

Извините, но я буду придерживаться 'is_array'. ** Он очень точно описывает, что он делает. ** Несколько микросекунд, которые вы экономите на одном вызове, не стоят зафускации исходного кода. Если вы снова просмотрите этот код через полгода, вы будете царапать голову WTF, которую вы пытались сделать здесь. – deceze