$a = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ));$b = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 2, 'cname' => '歌劇' ), Array ( 'cid' => 3, 'cname' => '美劇' ), Array ( 'cid' => 4, 'cname' => '視頻' ), Array ( 'cid' => 5, 'cname' => '娛樂' ), Array ( 'cid' => 6, 'cname' => '聯絡' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ));$c = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ), Array ( 'cid' => 2, 'cname' => '歌劇' ), Array ( 'cid' => 3, 'cname' => '美劇' ), Array ( 'cid' => 4, 'cname' => '視頻' ), Array ( 'cid' => 5, 'cname' => '娛樂' ), Array ( 'cid' => 6, 'cname' => '聯絡' ));
已知$a,參照$a把$b排序成$c的樣子。
回複內容:
$a = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ));$b = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 2, 'cname' => '歌劇' ), Array ( 'cid' => 3, 'cname' => '美劇' ), Array ( 'cid' => 4, 'cname' => '視頻' ), Array ( 'cid' => 5, 'cname' => '娛樂' ), Array ( 'cid' => 6, 'cname' => '聯絡' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ));$c = Array( Array ( 'cid' => 1, 'cname' => '關於' ), Array ( 'cid' => 7, 'cname' => '簡介' ), Array ( 'cid' => 8, 'cname' => '文化' ), Array ( 'cid' => 9, 'cname' => '動態' ), Array ( 'cid' => 2, 'cname' => '歌劇' ), Array ( 'cid' => 3, 'cname' => '美劇' ), Array ( 'cid' => 4, 'cname' => '視頻' ), Array ( 'cid' => 5, 'cname' => '娛樂' ), Array ( 'cid' => 6, 'cname' => '聯絡' ));
已知$a,參照$a把$b排序成$c的樣子。
使用自訂排序函數usort來一發
ref = $ref; $this->array = $array; usort($this->array,function($t1,$t2){ $p1 = array_search($t1,$this->ref); $p2 = array_search($t2,$this->ref); if(($p1===false||$p1===null) && ($p2===false||$p2===null)) return array_search($t1,$this->array)array) ? -1 :1; if($p1===$p2) return 0; if($p1===false||$p1===null) return 1; if($p2===false||$p2===null) return -1; return $p1<$p2 ? -1 : 1; }); } }//----------------------$res = new SortByArray($a,$b);print_r($res->array);?>
這個應該是多維陣列排序問題,php中的 array_multisort可以用於多維陣列排序。
具體實現代碼就不寫了,可以看看手冊自己琢磨一下。
/** * [oneArrayTo 二維數組按某個數組值排序 一對多] * @param [type] $a [參照數組] * @param [type] $b [這個是要被排序的數組] * @param [type] $keyword [索引值] * @return [type] [description] */function oneArrayTo($a,$b,$keyword){ $newa = array(); foreach ($a as $key => $value) { $newa[] = $value[$keyword]; } $newa = array_flip($newa); $newb = array(); foreach ($b as $key => $value) { $newb[] = $value[$keyword]; } $newb = array_flip($newb); $d = $newb; foreach ($newb as $k => $v) { foreach ($newa as $key => $value) { if($key == $k) { unset($d[$k]); } } } $c = array_flip($newa); $d = array_flip($d); $p = array_merge($c,$d); $p = array_flip($p); $newbb = array(); foreach ($b as $key => $value) { $newbb[$value[$keyword]] = $value; } $g = array(); foreach ($p as $key => $value) { $g[] = $newbb[$key]; } return $g;}
自己寫好了,雖然是笨方法。