《PHP學(xué)習(xí):php對(duì)二維數(shù)組進(jìn)行相關(guān)操作(排序、轉(zhuǎn)換、去空白等)》要點(diǎn):
本文介紹了PHP學(xué)習(xí):php對(duì)二維數(shù)組進(jìn)行相關(guān)操作(排序、轉(zhuǎn)換、去空白等),希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
技巧提示:
PHP教程
array_keys($array) //返回所有鍵名 array_values($array) //返回所有鍵值 $result=array_reverse($input); //將數(shù)組顛倒,不保留鍵名 $result_keyed=array_reverse($input,true); //將數(shù)組顛倒,保留鍵名 array_keys($array,"blue"); //返回值為blue的鍵名
1. PHP二維數(shù)組去重復(fù)項(xiàng)函數(shù)?
PHP數(shù)組去除重復(fù)項(xiàng)有個(gè)內(nèi)置函數(shù)array_unique (),但是php的 array_unique函數(shù)只適用于一維數(shù)組,對(duì)多維數(shù)組并不適用,以下提供一個(gè)二維數(shù)組的array_unique函數(shù)
PHP教程
function unique_arr($array2D,$stkeep=false,$ndformat=true) { // 判斷是否保留一級(jí)數(shù)組鍵 (一級(jí)數(shù)組鍵可以為非數(shù)字) if($stkeep) $stArr = array_keys($array2D); // 判斷是否保留二級(jí)數(shù)組鍵 (所有二級(jí)數(shù)組鍵必須相同) if($ndformat) $ndArr = array_keys(end($array2D)); //降維,也可以用implode,將一維數(shù)組轉(zhuǎn)換為用逗號(hào)連接的字符串 foreach ($array2D as $v){ $v = join(",",$v); $temp[] = $v; } //去掉重復(fù)的字符串,也就是重復(fù)的一維數(shù)組 $temp = array_unique($temp); //再將拆開的數(shù)組重新組裝 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. 二維數(shù)組的排序辦法
一維數(shù)組排序辦法:
公用函數(shù):
PHP教程
function printr($arr) { echo '<pre>'; print_r($arr); echo '</pre><br>'; }
第一組 :sort 和 rsort ,依照PHP數(shù)組鍵值的順序asc和逆序desc進(jìn)行排序,同時(shí)破壞原來數(shù)組的索引關(guān)系――其實(shí)是刪除索引之后重新建立從0開始的數(shù)字索引.
PHP教程
$a = array('a'=>1,2); sort($a); printr($a); rsort($a); printr($a); /*Array ( [0] => 1 [1] => 2 ) Array ( [0] => 2 [1] => 1 ) */
第二組函數(shù):asort 和 arsort ,這兩個(gè)函數(shù)就比較厲害一點(diǎn)了,只要他們可以保留數(shù)組原有的索引關(guān)系,把上例的sort 和 rsort 分別用這兩個(gè)函數(shù)替換一下
PHP教程
$a = array('a'=>1,2); asort($a); printr($a); arsort($a); printr($a); /* Array ( [a] => 1 [0] => 2 ) Array ( [0] => 2 [a] => 1 ) */
第三組PHP數(shù)組排序函數(shù):krsort 和 ksort ,這兩個(gè)不同于以上兩組,這兩函數(shù)是對(duì)鍵名進(jìn)行排序的.
PHP教程
$a = array('a'=>1,2); ksort($a); printr($a); krsort($a); printr($a); /* Array ( [0] => 2 [a] => 1 ) Array ( [a] => 1 [0] => 2 ) */
通過自定義函數(shù)對(duì)PHP數(shù)組進(jìn)行排序,有三個(gè)函數(shù)分別是:
uasort 通過自定義函數(shù)對(duì)PHP數(shù)組的鍵值進(jìn)行排序,并且保留原來的索引關(guān)系.
uksort 通過自定義函數(shù)對(duì)PHP數(shù)組的鍵名進(jìn)行排序,并且保留原來的索引關(guān)系.
usort通過自定義函數(shù)對(duì)PHP數(shù)組的鍵值進(jìn)行排序,并且刪除原來的索 引關(guān)系,從零開始建立新的索引.
下面是二維排序:
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 <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 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; }
實(shí)例:
PHP教程
//################# 示例 ################# $arr = array( array( 'name' => '學(xué)習(xí)', '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>'; //注意:依照數(shù)字方式排序時(shí) 153 比 65 小 $temp = sortArr($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING"); print_r($temp); echo '</pre>';
3. 多維數(shù)組轉(zhuǎn)一維數(shù)組
PHP教程
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; }
?實(shí)例:
PHP教程
$arr=array('123.html','456.html',array('dw.html','fl.html',array('ps.html','fw.html')),'ab.html'); // 定義一個(gè)三維數(shù)組,用來檢測(cè)我們的函數(shù) echo '<pre>'; print_r(rebuild_array($arr)); echo '</pre>';
4. 從數(shù)組中刪除空白的元素
PHP教程
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; } } } }
實(shí)例:
PHP教程
$a = array(array(3),2,'',array('',23),0); array_remove_empty($a); printr($a); // printr 函數(shù)請(qǐng)?jiān)诒疚闹姓?
5. 獲取多維數(shù)組下特定鍵下的值,并生成一維數(shù)組
PHP教程
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'));
以上就是本文的全部?jī)?nèi)容,php對(duì)于二維數(shù)組的相應(yīng)操作介紹的很詳細(xì),希望對(duì)大家的學(xué)習(xí)有所贊助.PHP教程
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP學(xué)習(xí):php對(duì)二維數(shù)組進(jìn)行相關(guān)操作(排序、轉(zhuǎn)換、去空白等)》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/8463.html