PHP 中检查是否关联数组(多维数组)的方法 (UPDATE!)

摘自 xoad 的检查是否关联数组(多维数组)的方法

数组在PHP中是最常用的一种数据类型,PHP 支持一维和多维数组,在操作数组元素时,对一维数组和多维数组的处理方法有许多不同之处,因此,许多时候,我们需要在操作前先检测一下数组类型,本文介绍的就是解决这一问题的方法。

<?php
// 说明:摘自 xoad 的检查是否关联数组(多维数组)的方法
// 整理:http://www.CodeBit.cn

function isAssocArray($var)
{
	if ( ! is_array($var))
	{
		return false;
	}

	$arrayKeys = array_keys($var);

	$sequentialKeys = range(0, sizeof($var));

	if (function_exists('array_diff_assoc'))
	{
		if (array_diff_assoc($arrayKeys, $sequentialKeys))
		{
			return true;
		}
	}
	else
	{
		if ((array_diff($arrayKeys, $sequentialKeys)) &&
			(array_diff($sequentialKeys, $arrayKeys)))
		{
			return true;
		}
	}
	return false;
}

$array_1 = array(
	'http://www.CodeBit.cn',
	'http://YITU.org'
);

$array_2 = array(
	'CodeBit.cn'=>'http://www.CodeBit.cn',
	'YITU.org'=>'http://YITU.org'
);

echo (isAssocArray($array_1))?'是':'否'; // 否

echo "<br />";

echo (isAssocArray($array_2))?'是':'否'; // 是
?>

网友 etng 发布的检查是否关联数组(多维数组)的方法

数组在PHP中是最常用的一种数据类型,PHP 支持一维和多维数组,在操作数组元素时,对一维数组和多维数组的处理方法有许多不同之处,因此,许多时候,我们需要在操作前先检测一下数组类型,本文介绍的就是解决这一问题的方法。

<?php

// 说明:检查是否关联数组(多维数组)的方法
// 整理:http://www.CodeBit.cn

//作者:etng
//网址:http://www.etng.net/blog

function isAA($input)
{
    return is_array($input)
            && !(array_keys($input) === range(0, sizeof($input)-1));
}

$array_1 = array(
	'http://www.CodeBit.cn',
	'http://YITU.org'
);

$array_2 = array(
	'CodeBit.cn'=>'http://www.CodeBit.cn',
	'YITU.org'=>'http://YITU.org'
);

echo isAA($array_1)?'是':'否'; // 否
echo "<br />";
echo isAA($array_2)?'是':'否'; // 是 

?>

实现思路:
(1) is_array($input) 检查是否是数组。
(2) array_keys($input) 获取数组的 key(如果是一维数组,其返回一个元素是0到数组大小的数组),然后通过 range(0, sizeof($input)-1) 生成一个0 到 数组大小的一维数组,比较两个数组是否一致(===),如果一致,说明是一维数组,否则(!),便是多维数组。

网友 etng 发布的这段代码结构清晰,代码简洁,非常感谢网友 etng 对本站的支持,

关于 Artlover

有多年 web 开发经验,擅长领域 PHP / MySQL / CSS / Javascript / Zend Framework ,期望:在分享中共同成长。
此条目发表在 PHP 分类目录,贴了 , , , , , 标签。将固定链接加入收藏夹。

PHP 中检查是否关联数组(多维数组)的方法 (UPDATE!)》有 3 条评论

  1. etng 说:

    我来写个

    function isAA($input)
    {
    return is_array($input)
    && !(array_keys($input) === range(0, sizeof($input)-1));
    }

  2. Amy 说:

    === 是什么意思

  3. CodeBit.cn 说:

    “===” 是恒等操作符,是比等于操作符(“==”)更加严格的比较方式,比如:
    “2″ == 2 是 true ,但是 “2″ === 2 则是 false 。

    恒等操作符判断两个元素是否相等并且是同种类型,此操作符不进行隐式类型转换。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>