一個數組根據另一個數組來排序

來源:互聯網
上載者:User
關鍵字 php
$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;}

自己寫好了,雖然是笨方法。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.