php排列組合函數,php數組排列函數

本文目錄一覽:

用php實現排列組合問題

var arr = [];

function f(l,n,s){

if(n==l||n==0){

for(var i=0;il;i++){

s+=n?”1″:”0″;

}

arr.push(s);

return s;

}else{

f(l-1,n-1,s+”1″);

f(l-1,n,s+”0″);

}

}

f(4,2,””);

這道題本來是,一個長度為l的二進制數字,其中有n個1,剩下都為0,有多少種組合,放這道題好像可以,最後只要取得arr的長度就行了

var m = 4;

var n = 2;

var s = 0;

function f(m,n){

if(m==n||n==0){

s++;

return false;

}

f(m-1,n-1);

f(m-1,n);

}

f(m,n);

PHP數組排序array_multisort函數詳細用法跟排序方法是怎樣的?

一、先看最簡單的情況。有兩個數組:

$arr1 = array(1,9,5);

$arr2 = array(6,2,4);

array_multisort($arr1,$arr2);

print_r($arr1); // 得到的順序是1,5,9

print_r($arr2); // 得到的順序是6,4,2

我估計兩個數組的值自始至終都是對應着的:1對應6,9對應2,5對應4。

我們再加多一個數組看看會怎樣:

$arr1 = array(1,9,5);

$arr2 = array(6,2,4);

$arr3 = array(3,7,8);

array_multisort($arr1,$arr2,$arr3);

查看結果,1自始至終都對應6對應3,其它項也是如此。這種對應關係就是手冊中所謂的「排序時保留原有的鍵名關聯」。

另外也可以把每個數組想像成數據庫表的一列。而對應着的1,6,3為一數據行,9,2,7為另一數據行。。。

array_multisort會先按第一個數組(想像成列)排序,如果第一個數組(列)的值相同,則按第二個數組(列)排序。

具體可以用下面的程式來測試:

$arr1 = array(1,9,5,9);

$arr2 = array(6,2,4,1);

$arr3 = array(3,7,8,0);

array_multisort($arr1,$arr2,$arr3);

可以想像這裡$arr3的結果是(3,8,0,7)。

二、接下來講解array_multisort的參數。這個函數的參數很靈活。最簡單的情況是如上面所示的以1個或n個數組作為參數,需要注意的是每個數組的項數要一樣,否則會warning導致排序失效。

像這樣array_multisort($arr1,$arr2,$arr3); 默認是所有數組都是升序排列,如果想對$arr2降序,併當作字符串去比較,就要寫成:

array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);

每個array後面可以跟一個排序順序標誌或一個排序類型標誌,或者兩種標誌同時出現。但是每種排序標誌在每個數組後面只能出現一個。

詳細如下:

排序順序標誌:

SORT_ASC – 按照上升順序排序(默認)

SORT_DESC – 按照下降順序排序

排序類型標誌:

SORT_REGULAR – 將項目按照通常方法比較(默認)

SORT_NUMERIC – 將項目按照數值比較

SORT_STRING – 將項目按照字符串比較

三、最後是array_multisort有什麼實際作用。

我們通常有一些多維數組需要排序:

$guys = Array

(

[0] = Array

(

[name] = jake

[score] = 80

[grade] = A

)

[1] = Array

(

[name] = jin

[score] = 70

[grade] = A

)

[2] = Array

(

[name] = john

[score] = 80

[grade] = A

)

[3] = Array

(

[name] = ben

[score] = 20

[grade] = B

)

)

例如我們想按成績倒序排列,如果成績相同就按名字的升序排列。

這時我們就需要根據$guys的順序多弄兩個數組出來:

$scores = array(80,70,80,20);

$names = array(‘jake’,’jin’,’john’,’ben’);

然後

array_multisort($scores, SORT_DESC, $names, $guys);就行了

還能不能更靈活一點呢,每次想排序都要另外弄些數組出來嗎?

其實在qeephp的helper_array類裏面已經封裝得很好,下面是它的兩個方法,需要的人自己修改一下就可以用了:

/**

* 根據指定的鍵對數組排序

*

* 用法:

* @code php

* $rows = array(

* array(‘id’ = 1, ‘value’ = ‘1-1’, ‘parent’ = 1),

* array(‘id’ = 2, ‘value’ = ‘2-1’, ‘parent’ = 1),

* array(‘id’ = 3, ‘value’ = ‘3-1’, ‘parent’ = 1),

* array(‘id’ = 4, ‘value’ = ‘4-1’, ‘parent’ = 2),

* array(‘id’ = 5, ‘value’ = ‘5-1’, ‘parent’ = 2),

* array(‘id’ = 6, ‘value’ = ‘6-1’, ‘parent’ = 3),

* );

*

* $rows = Helper_Array::sortByCol($rows, ‘id’, SORT_DESC);

* dump($rows);

* // 輸出結果為:

* // array(

* // array(‘id’ = 6, ‘value’ = ‘6-1’, ‘parent’ = 3),

* // array(‘id’ = 5, ‘value’ = ‘5-1’, ‘parent’ = 2),

* // array(‘id’ = 4, ‘value’ = ‘4-1’, ‘parent’ = 2),

* // array(‘id’ = 3, ‘value’ = ‘3-1’, ‘parent’ = 1),

* // array(‘id’ = 2, ‘value’ = ‘2-1’, ‘parent’ = 1),

* // array(‘id’ = 1, ‘value’ = ‘1-1’, ‘parent’ = 1),

* // )

* @endcode

*

* @param array $array 要排序的數組

* @param string $keyname 排序的鍵

* @param int $dir 排序方向

*

* @return array 排序後的數組

*/

static function sortByCol($array, $keyname, $dir = SORT_ASC)

{

return self::sortByMultiCols($array, array($keyname = $dir));

}

/**

* 將一個二維數組按照多個列進行排序,類似 SQL 語句中的 ORDER BY

*

* 用法:

* @code php

* $rows = Helper_Array::sortByMultiCols($rows, array(

* ‘parent’ = SORT_ASC,

* ‘name’ = SORT_DESC,

* ));

* @endcode

*

* @param array $rowset 要排序的數組

* @param array $args 排序的鍵

*

* @return array 排序後的數組

*/

static function sortByMultiCols($rowset, $args)

{

$sortArray = array();

$sortRule = ”;

foreach ($args as $sortField = $sortDir)

{

foreach ($rowset as $offset = $row)

{

$sortArray[$sortField][$offset] = $row[$sortField];

}

$sortRule .= ‘$sortArray[\” . $sortField . ‘\’], ‘ . $sortDir . ‘, ‘;

}

if (empty($sortArray) || empty($sortRule)) { return $rowset; }

eval(‘array_multisort(‘ . $sortRule . ‘$rowset);’);

return $rowset;

}

php 如何做排列組合

原理相當於自己建個樹,不停地在末尾里添加上子節點,最後遍歷整個樹。

代碼如下:

?php

$str=’1=12,2=34,3=14,4=23′;

$_str=explode(‘,’,$str);

$_str=array_reverse($_str);

$_key=array();

$tree=array();

foreach($_str as $v){

$str=explode(‘=’,$v);

$_key[]=$str[0];

$str=str_split($str[1]);

$_tree=array();

foreach($str as $node){

if(empty($tree)):

$_tree[][]=$node;

else:

foreach($tree as $_node) $_tree[]=str_split(implode($_node).$node);

endif;

}

$tree=$_tree;

}

foreach($tree as $v){

$str=array();

foreach($v as $_k=$_v) $str[]=$_key[$_k].’=’.$_v;

echo implode(‘,’,array_reverse($str)),’br’;

}

?

PHP實現的自定義數組排序函數與排序類示例

本文實例講述了PHP實現的自定義數組排序函數與排序類。分享給大家供大家參考,具體如下:

/*

*

二維數組自定義排序函數

*

uasort($arr,function_name)

*

**/

$arr

=

array(

array(‘a’=1,’b’=’c’),

array(‘a’=4,’b’=’a’),

array(‘a’=5,’b’=’g’),

array(‘a’=7,’b’=’f’),

array(‘a’=6,’b’=’e’)

);

function

compare_arr($x,$y){

if($x[‘b’]$y[‘b’]){

return

-1;

}else

if($x[‘b’]$y[‘b’]){

return

1;

}else{

return

0;

}

}

uasort($arr,’compare_arr’);

foreach($arr

as

$a){

echo

$a[‘a’].’=’.$a[‘b’].’br/’;

}

手冊里的自定義排序類:

class

multiSort

{

var

$key;

//key

in

your

array

//排序函數

參數依次是

數組

待排列索引

排序類型

function

run

($myarray,

$key_to_sort,

$type_of_sort

=

”)

{

$this-key

=

$key_to_sort;

if

($type_of_sort

==

‘desc’)

uasort($myarray,

array($this,

‘myreverse_compare’));

else

uasort($myarray,

array($this,

‘mycompare’));

return

$myarray;

}

//正序

function

mycompare($x,

$y)

{

if

(

$x[$this-key]

==

$y[$this-key]

)

return

0;

else

if

(

$x[$this-key]

$y[$this-key]

)

return

-1;

else

return

1;

}

//逆序

function

myreverse_compare($x,

$y)

{

if

(

$x[$this-key]

==

$y[$this-key]

)

return

0;

else

if

(

$x[$this-key]

$y[$this-key]

)

return

-1;

else

return

1;

}

}

更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP數組(Array)操作技巧大全》、《php排序算法總結》、《php字符串(string)用法總結》、《PHP針對XML文件操作技巧總結》、《PHP錯誤與異常處理方法總結》、《PHP運算與運算符用法總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

PHP 多個數組的排列組合

$a = array(1,2,3,4,5,6,7);

$b = array(1,2,3);

$c = array(1,2,3,4,5,6,7,8,9,10);

$d = array($a,$b,$c);

//計算每一個數組的長度

$len = 1;

$arrLen = count($d); //需要排列數組有多少個

$recIndex = null; //記錄當前該取的位置

//foreach 計數

$count_3 = 0;

foreach ($d as $key = $value) {

$lenRec[$count_3] = count($value);

$len = $lenRec[$count_3]*$len;

$recIndex[] = 0;//第一次全部取第0個

$count_3++;

}

//算出% 的值

$count = 1;

foreach ($lenRec as $key = $value) {

$moduloVal = 1;

if($arrLen == $count){

$modulo[] = count($d[$arrLen-1]); //等於最後一個的長度

}else{

$count_1 = 1;

foreach ($lenRec as $index = $item) {

$count_1 $count $moduloVal = $moduloVal*$item;

$count_1 ++;

}

$modulo[] = $moduloVal;

}

$count ++;//為了防止$d key是有值的 不是自然序列 需要計數

}

$i = 1;

while ( $i = $len) {

$html = ”;

$count_2 = 0;// 取模

$temp = ”;

foreach ($d as $value) {

$html .= $value[$recIndex[$count_2]%$lenRec[$count_2]].”,”;

$count_2 ++;

}

echo $html.”br”;

foreach ($modulo as $key = $value) {

if($i%$value == 0 $key $arrLen – 1 ){

$recIndex[$key] = $recIndex[$key] +1;

}

if($key == $arrLen – 1){

if($i%$value == 0){

$recIndex[$key] = 0;

}else{

$recIndex[$key] = $recIndex[$key] +1;

}

}

}

$i ++;

//改變獲取的位置

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/285961.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:06
下一篇 2024-12-22 16:06

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論