技巧提示:
array_keys($array) //返回所有鍵名 array_values($array) //返回所有鍵值 $result=array_reverse($input); //將數組顛倒,不保留鍵名 $result_keyed=array_reverse($input,true); //將數組顛倒,保留鍵名 array_keys($array,"blue"); //返回值為blue的鍵名
1. PHP二維數組去重復項函數
PHP數組去除重復項有個內置函數array_unique (),但是php的 array_unique函數只適用於一維數組,對多維數組並不適用,以下提供一個二維數組的array_unique函數
function unique_arr($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')); print_r($array2D); print_r(unique_arr($array2D,true));
2. 二維數組的排序方法
一維數組排序方法:
公用函數:
function printr($arr) { echo '<pre>'; print_r($arr); echo '</pre><br>'; }
第一組 :sort 和 rsort ,按照PHP數組鍵值的順序asc和逆序desc進行排序,同時破壞原來數組的索引關系——其實是刪除索引之後重新建立從0開始的數字索引。
$a = array('a'=>1,2); sort($a); printr($a); rsort($a); printr($a); /*Array ( [0] => 1 [1] => 2 ) Array ( [0] => 2 [1] => 1 ) */
第二組函數:asort 和 arsort ,這兩個函數就比較厲害一點了,只要他們可以保留數組原有的索引關系,把上例的sort 和 rsort 分別用這兩個函數替換一下
$a = array('a'=>1,2); asort($a); printr($a); arsort($a); printr($a); /* Array ( [a] => 1 [0] => 2 ) Array ( [0] => 2 [a] => 1 ) */
第三組PHP數組排序函數:krsort 和 ksort ,這兩個不同於以上兩組,這兩函數是對鍵名進行排序的.
$a = array('a'=>1,2); ksort($a); printr($a); krsort($a); printr($a); /* Array ( [0] => 2 [a] => 1 ) Array ( [a] => 1 [0] => 2 ) */
通過自定義函數對PHP數組進行排序,有三個函數分別是:
uasort 通過自定義函數對PHP數組的鍵值進行排序,並且保留原來的索引關系。
uksort 通過自定義函數對PHP數組的鍵名進行排序,並且保留原來的索引關系。
usort通過自定義函數對PHP數組的鍵值進行排序,並且刪除原來的索 引關系,從零開始建立新的索引。
下面是二維排序:
/** * @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. * * sortArr($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……) * @author Chunsheng Wang <[email protected]> * @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 sortArr($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] = strtolower($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', ), ); echo '<pre>'; print_r($arr); echo '<br>'; //注意:按照數字方式排序時 153 比 65 小 $temp = sortArr($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING"); print_r($temp); echo '</pre>';
3. 多維數組轉一維數組
function rebuild_array($arr){ //rebuild a array static $tmp=array(); for($i=0; $i<count($arr); $i++){ if(is_array($arr[$i])){ rebuild_array($arr[$i]); }else{ $tmp[]=$arr[$i]; } } return $tmp; }
實例:
$arr=array('123.html','456.html',array('dw.html','fl.html',array('ps.html','fw.html')),'ab.html'); // 定義一個三維數組,用來檢測我們的函數 echo '<pre>'; print_r(rebuild_array($arr)); echo '</pre>';
4. 從數組中刪除空白的元素
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; } } } }
實例:
$a = array(array(3),2,'',array('',23),0); array_remove_empty($a); printr($a); // printr 函數請在本文中找
5. 獲取多維數組下特定鍵下的值,並生成一維數組
function getall_by_key(array $arr, $key){ if (!trim($key)) return false; preg_match_all("/\"$key\";\w{1}:(?:\d+:|)(.*?);/", serialize($arr), $output); return $output[1]; } $testArr = array('111'=> 100, 'out'=> 200, '333' => array('out' => 310, array(321, 322, 'out' => "this is a test"))); printr(getall_by_key($testArr, 'out'));
以上就是本文的全部內容,php對於二維數組的相應操作介紹的很詳細,希望對大家的學習有所幫助。