如何识别PHP变量是否是一个数组

时间:2009-07-16 05:27:56

标签: php

如何检查PHP变量是否为数组? $ value是我的PHP变量以及如何检查它是否是一个数组?

4 个答案:

答案 0 :(得分:8)

echo is_array($ variable);

http://us3.php.net/is_array

答案 1 :(得分:3)

php有一个名为is_array($ var)的函数,它返回bool以指示参数是否为数组 http://ir.php.net/is_array

答案 2 :(得分:1)

is_array - 查找变量是否为数组

http://uk.php.net/is_array

答案 3 :(得分: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