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 对本站的支持,

给 Javascript 数组添加一个 indexOf 方法

Javascript 的字符串有个 indexOf 的方法,能够返回字符在指定的字符串中的位置,非常有用,本文介绍了如何给 Javascript 数组也添加一个类似的方法。

给 Javascript 数组添加一个 indexOf 方法 – 示例

 
<script type="text/javascript">
//<![CDATA[
// 说明:给 Javascript 数组添加一个 indexOf 方法
// 整理:http://www.CodeBit.cn

[].indexOf || (Array.prototype.indexOf = function(v){
       for(var i = this.length; i-- && this[i] !== v;);
       return i;
});

var b = [0, 1, '哈哈', 3, 4, '嘿嘿', 6, 7, 8, 9];

document.write("<br /><br /><br />b = ", b.join(","), "<br />");

document.write("<br />b.indexOf(2) = ", b.indexOf(2));
document.write("<br />b.indexOf('嘿嘿') = ", b.indexOf('嘿嘿'));

//]]>
</script>

为 Javascript 数组添加 shuffle 方法

PHP 里面有个非常方便的打乱数组的函数 shuffle() ,这个功能在许多情况下都会用到,但 javascript 的数组却没有这个方法,没有不要紧,可以扩展一个,自己动手,丰衣足食嘛。

为 Javascript 数组添加 shuffle 方法 – 示例

 
<script type="text/javascript">
//<![CDATA[
// 说明:为 Javascript 数组添加 shuffle 方法
// 整理:http://www.CodeBit.cn

var shuffle = function(v){
    for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);
    return v;
};

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

document.write("A = ", a.join(","), "<br />shuffle(A) = ", shuffle(a));

//]]>
</script>

通过 prototype 给数组添加一个方法:

 
<script type="text/javascript">
//<![CDATA[

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

if (!Array.prototype.shuffle) { 
	Array.prototype.shuffle = function() {
		for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
		return this;
	};
}

document.write("A = ", a.join(","), "<br />A.shuffle() = ", a.shuffle());

//]]>
</script>

PHP 中打乱(shuffle)关联数组的排序

PHP 提供了一个 shuffle() 函数,可以打乱给定的数组排序,但是此函数“将删除原有的键名而不仅是重新排序”,如果传入的是关联数组,则关联数组的键名将丢失,本文介绍的函数可以解决这一问题。

 
<?php
// 说明:PHP 中打乱(shuffle)关联数组的排序
// 整理:http://www.CodeBit.cn

$arr = array(
	'Javascript'=>'253',
	'CSS'=>'612',
	'PHP/MySQL'=>'1036',
	'(X)HTML'=>'361',
	'Ajax'=>'492',
);

// 打乱关联数组的排序
function shuffle_assoc($array)
{ 
	$randomized_keys = array_rand($array, count($array)); 
	foreach($randomized_keys as $current_key)
	{ 
		$output[$current_key] = $array[$current_key]; 
	} 
	return $output;
}

echo "<pre>";
print_r($arr);
echo "</pre><hr />";


echo "<pre>";
print_r(shuffle_assoc($arr));
echo "</pre><hr />";

?>

为 Javascript 数组添加 insertAt 和 removeAt 方法

本文介绍的 insertAt 方法可以为 javascript 数组在指定位置插入指定的值,而 removeAt 则是删除指定位置的数组元素,有了这两个方法,我们在操作数组元素时会简单很多。

为 Javascript 数组添加 insertAt 和 removeAt 方法 – 示例

 
<script language="JavaScript">
<!--
// 说明:为 Javascript 数组添加 insertAt 和 removeAt 方法
// 整理:http://www.CodeBit.cn

	Array.prototype.insertAt = function( index, value ) {
		var part1 = this.slice( 0, index );
		var part2 = this.slice( index );
		part1.push( value );
		return( part1.concat( part2 ) );
	};

	Array.prototype.removeAt = function( index )
	{
		var part1 = this.slice( 0, index );
		var part2 = this.slice( index );
		part1.pop();
		return( part1.concat( part2 ) );
	}
// -->
</script>

为 Javascript 数组添加一个 inArray 方法

了解 PHP 的朋友都知道, PHP 里面有个很好用的函数叫“in_array”,它可以用来检查数组中是否存在某个值,本文介绍的是通过 prototype 向 javascript 数组添加一个类似的方法,简单但是实用。

 
<script type="text/javascript">
// 说明:为 Javascript 数组添加一个 inArray 方法
// 整理:http://www.CodeBit.cn

Array.prototype.inArray = function (value)
// Returns true if the passed value is found in the
// array.  Returns false if it is not.
{
    var i;
    for (i=0; i < this.length; i++) {
        // Matches identical (===), not just similar (==).
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};

var arr = ['苹果', '香蕉', '梨', '桔子', '西瓜'];

alert(arr.inArray('桔子'));	// true
alert(arr.inArray('核桃'));	// false

</script>

PHP中二维数组的排序方法

本文介绍的是从 BugFree 摘录来的二维数组排序函数,可以实现类似 MySQL 的 ORDER BY 效果,当数组不是从数据库取得时会有特殊应用。

 
<?php
// 说明:PHP中二维数组的排序方法
// 整理:http://www.CodeBit.cn

/**
 * @package     BugFree
 * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
 *
 *
 * Sort an two-dimension array by some level two items use array_multisort() function.
 *
 * sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
 * @author                      Chunsheng Wang <wwccss@263.net>
 * @param  array   $ArrayData   the array to sort.
 * @param  string  $KeyName1    the first item to sort by.
 * @param  string  $SortOrder1  the order to sort by("SORT_ASC"|"SORT_DESC")
 * @param  string  $SortType1   the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
 * @return array                sorted array.
 */
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))
    {
        return $ArrayData;
    }

    // Get args number.
    $ArgCount = func_num_args();

    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I < $ArgCount;$I ++)
    {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }

    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }

    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}


//################# 示例 #################
$arr = array(
	array(
		'name'		=>	'学习',
		'size'		=>	'1235',
		'type'		=>	'jpe',
		'time'		=>	'1921-11-13',
		'class'		=>	'dd',
	),
	array(
		'name'		=>	'中国功夫',
		'size'		=>	'153',
		'type'		=>	'jpe',
		'time'		=>	'2005-11-13',
		'class'		=>	'jj',
	),
	array(
		'name'		=>	'编程',
		'size'		=>	'35',
		'type'		=>	'gif',
		'time'		=>	'1997-11-13',
		'class'		=>	'dd',
	),
	array(
		'name'		=>	'中国功夫',
		'size'		=>	'65',
		'type'		=>	'jpe',
		'time'		=>	'1925-02-13',
		'class'		=>	'yy',
	),
	array(
		'name'		=>	'中国功夫',
		'size'		=>	'5',
		'type'		=>	'icon',
		'time'		=>	'1967-12-13',
		'class'		=>	'rr',
	),
);

print_r($arr);

//注意:按照数字方式排序时 153 比 65 小
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");

print_r($temp);

?>