日期:2014-05-17  浏览次数:20557 次

php数组工具类

PHP二维数组去重复项函数

<?php
function unique_array_2d($array2D,$stkeep=false,$ndformat=true)
{
	// 判断是否保留一级数组键 (一级数组键可以为非数字)
	if($stkeep) $stArr = array_keys($array2D);

	// 判断是否保留二级数组键 (所有二级数组键必须相同)
	if($ndformat) $ndArr = array_keys(end($array2D));

	//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
	foreach ($array2D as $v){
		$v = join(",",$v); 
		$temp[] = $v;
	}

	//去掉重复的字符串,也就是重复的一维数组
	$temp = array_unique($temp); 

	//再将拆开的数组重新组装
	foreach ($temp as $k => $v)
	{
		if($stkeep) $k = $stArr[$k];
		if($ndformat)
		{
			$tempArr = explode(",",$v); 
			foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
		}
		else $output[$k] = explode(",",$v); 
	}

	return $output;
}

$array2D = array(
	'first'=>array('title'=>'1111','date'=>'2222'),
	'second'=>array('title'=>'1111','date'=>'2222'),
	'third'=>array('title'=>'2222','date'=>'3333')
);

echo "<pre>";
print_r(unique_array_2d($array2D,true));

/**
* 将二维数组通过指定的 key 去重
*
* @param array $arr 要去重的数组
* @param array $by  指定key去重,该参数不指定将返回 array()
* @return array
*/
function array_multunique($arr,$by = array()) {
	$temp = array();
	foreach($arr as $key => $val) {
		foreach($by as $v) {
			$temp[$key] .= isset($val[$v]) ? $val[$v] : '';
		}
	}
	return array_intersect_key($arr,array_unique($temp));
}
/*$aa = array (  
    array ('id' => 123, 'name' => '张三' ),   
    array ('id' => 123, 'name' => '李四' ),   
    array ('id' => 124, 'name' => '王五' ),   
    array ('id' => 125, 'name' => '赵六' ),   
    array ('id' => 126, 'name' => '赵六' )   
);  
$key = 'id';  
array_multunique ($aa, array('id')); */

function array_remove_key($array,$keys){
	if (!is_array($array) || !is_array($keys)){
		return false;
	}
	foreach($array as $t){
		foreach($keys as $k){
			unset($t[$k]);
		}
		$doc[]=$t;
	}
	return $doc;

}
/*$array = array(
	'0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')),
	'1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee'))
);
print_r( array_remove_key($array,array('c')));*/

function array_remove_key_val(&$a,$b,$c){
	foreach ($a as $key=>$value){
		if ( isset($value[$b]) && ($value[$b]==$c) ){
			unset($a[$key]);
		}
	}
}
/*$a=array(
	array('id'=>1,'num'=>10,'type'=>'news'),
	array('id'=>2,'num'=>100,'type'=>'pic')
);
print_r( array_remove_key_val($a,"id","1") );*/

数组<=>xml 相互转换http://hudeyong926.iteye.com/blog/836048

<?php
/**
 * 从数组中删除空白的元素(包括只有空白字符的元素)
 *
 * @param array $arr
 * @param boolean $trim
 */
function array_remove_empty(& $arr, $trim = true)
{
    foreach ($arr as $key => $value) {
        if (is_array($value)) {
            array_remove_empty($arr[$key]);
        } else {
            $value = trim($value);
            if ($value == '') {
                unset($arr[$key]);
            } elseif ($trim) {
                $arr[$key] = $value;
            }
        }
    }
}

/**
 * 从一个二维数组中返回指定键的所有值
 *
 * @param array $arr
 * @param string $col
 *
 * @return array
 */
function array_col_values(& $arr, $col)
{
    $ret = array();
    foreach ($arr as $row) {
        if (isset($row[$col])) { $ret[] = $row[$col]; }
    }
    return $ret;
}

/**
 * 将一个二维数组转换为 hashmap
 *
 * 如果省略 $valueField 参数,则转换结果每一项为包含该项所有数据的数组。
 *
 * @param array $arr
 * @param string $keyField
 * @param string $valueField
 *
 * @return array
 */
function array_to_hashmap(& $arr, $keyField, $valueField = null)
{
    $ret = array();
    if ($valueField) {
        foreach ($arr as $row) {
            $ret[$row[$keyField]] = $row[$valueField];
        }
    } else {
        foreach ($arr as $row) {
            $ret[$row[$keyField]] = $row;
        }
    }
    return $ret;
}

/**
 * 将一个二维数组按照指定字段的值分组
 *
 * @param arra