❶ php與mysql表中如何求遞歸求和匯總
functionsumShuzi(&$tree,&$updateData=array()){
$sum=0;
//foreach($treeas$key=>$item){//這句話有毒
foreach($treeas$key=>&$item){
if(isset($item['children'])){
$oldPshuzi=$tree[$key]['Pshuzi'];
$tree[$key]['Pshuzi']=sumShuzi($item['children'],$updateData);
if($oldPshuzi!=$tree[$key]['Pshuzi']){
$updateData[$item['id']]=array($tree[$key]['Pshuzi'],$tree[$key]['Pname_ch']);
}
}
$sum+=$tree[$key]['Pshuzi'];
}
return$sum;
}
$tree=json_decode('[{"id":"1","Pid":"0","Pname_ch":"u6e20u9053u90e8","Pshuzi":"1638000","children":[{"id":"4","Pid":"1","Pname_ch":"u9500u552eu4e8cu90e8","Pshuzi":"895000","children":[{"id":"13","Pid":"4","Pname_ch":"u5468u7ecfu7406","Pshuzi":"28","children":[{"id":"28","Pid":"13","Pname_ch":"u6e56u5357","Pshuzi":"158000"},{"id":"35","Pid":"13","Pname_ch":"u65b0u7586","Pshuzi":"19000"}]},{"id":"40","Pid":"4","Pname_ch":"u9648u7ecfu7406","Pshuzi":"5000"}]}]}]',true);
//$tree是具有父子關系的數據樹
sumShuzi($tree,$updateData);
foreach($updateDataas$id=>$item){
$sql="updateyour_tablesetPshuzi={$item[0]}whereid={$id}";
mysqli_query($db,$sql);//$db是你的資料庫連接結果
}
❷ php中計算二維數組中某一元素之和的函數是那個啊謝謝……
PHP數組的總結(很全面啊)
一、什麼是數組
數組就是一組數據的集合,把一系列數據組織起來,形成一個可操作的整體。數組的每個實體都包含兩項:鍵和值。
二、聲明數據
在PHP中聲明數組的方式主要有兩種:一是應用array()函數聲明數組,一是直接為數組元素賦值。
1array()函數聲明的數
一、什麼是數組
數組就是一組數據的集合,把一系列數據組織起來,形成一個可操作的整體。數組的每個實體都包含兩項:鍵和值。
二、聲明數據
在PHP中聲明數組的方式主要有兩種:一是應用array()函數聲明數組,一是直接為數組元素賦值。
<1>array()函數聲明的數組的方式array([mixed...])
參數mixed的語法為key=>value
如,<?php
$array=array("1"=>"編","2"=>"程","3"=>"詞","4"=>"典");
print_r($array);
echo
"<br>";
echo
$array[1];
//注意:下標默認是從0開始
echo
$array[2];
echo
$array[3];
echo
$array[4];
?>
<2>直接為數組元素賦值。如果在創建數組時不知所創建數組的大小,或在實際編寫程序時數組的大小可能發生變化,採用這種數組創建的方法較好。
如,<?php
$array[1]="I";
$array[2]="love";
$array[3]="PHP";
print_r($array);
//輸出所創建數組的結構
?>
三、數組的類型
PHP支持兩種數組:索引數組(indexed
array)和聯合數組(associative
array),前者使用數字作為鍵,後者使用字元串作為鍵。
四、輸出數組
在PHP中對數組元素輸出,可以通過echo和print語句來實現,但這只能對數組中某一元素進行輸出;要將數組結構輸出則要使用print_r()函數,其語法:print_r(mixed
expression),參數expression為普通的整形、字元型或實型變數則輸出該變數本身,如果該參數為數組,則按一定鍵值和元素的順序顯示出該數組中的所有元素。
五、數組的構造
一維數組:
當一個數組的元素是變數時,則稱其為一維數組。
聲明一位數組:
類型說明符
數組名[常量表達式];
二維數組:
當一個數組的元素是一個一位數組時,則稱之為二維數組。
如,<?php
$str
=
array
(
"網路編程語言"=>array
("PHP","JSP","ASP"),
"體育項目"=>array
("m"=>"足球","n"=>"籃球"));
print_r
(
$str)
;
?>
六、遍歷數組
遍歷數組中的所有元素是常用的一種操作,在遍歷的過程中可以完成查詢或其他功能。在PHP中遍歷數組的方法有多種,下面介紹最常用的兩種方法。
<1>使用foreach結構遍歷數組;
<2>使用list()函數遍歷數組,list()函數僅能用於數字索引的數組,且數字索引從0開始。
例:綜合使用list()和each()認證用戶登錄:
<?php
//輸出用戶登錄信息
while(list($name,$value)=each($_POST)){
if($name!="submit"){
echo
"$name=$value<br>";
}
}
?>
七、統計數組元素個數
在PHP中,使用count()函數對數組中的元素個數進行統計,語法為:int
coun(mixed
array[,int
mode]),其中參數array為必要參數,mode為可選參數,若選中COUNT——RECURSIVE(或1),本函數將遞歸地對數組數組。如,
<?php
$array
=
array("php"
=>
array("PHP函數參考大全","PHP程序開發範例寶典","PHP資料庫系統開發完全手冊"),
"asp"
=>
array("ASP經驗技巧寶典")
);
//聲明一個二維數組
echo
count($array,COUNT_RECURSIVE);//遞歸統計數組元素的個數,運行結果為6
?>
八、數組排序
<1>使用sort()和rsort()分別對數組進行升序和降序,如,
<?php
$array=array(5,26,37,18,9,42,88,66);
$array1=sort($array);
for($i=0;$i<count($array);$i++){
echo
$array[$i]." ";
}
echo
"<br>";
$array1=rsort($array);
for($i=0;$i<count($array);$i++){
echo
$array[$i]."  ";
}
?>
運行結果:
5
9
18
26
37
42
66
88
88
66
42
37
26
18
9
5
<2>使用ksort()和asort()對關聯數組排序
如果使用了相關數組,在排序後還要保持關鍵字和值的排序一致,這是就需要使用ksort()和asort()函
數,如,
<?php
$array=array('php'=>1,'jsp'=>2,'asp'=>3);
ksort($array);
print_r($array);
echo
"<br>";
asort($array);
print_r($array);
?>
運行結果:
Array
(
[asp]
=>
3
[jsp]
=>
2
[php]
=>
1
)
Array
(
[php]
=>
1
[jsp]
=>
2
[asp]
=>
3
)
❸ PHP 如何遞歸演算法
一般來說,類似這種遍歷輸出所有文件,大多採用遞歸演算法,這樣程序顯得比較簡潔,其實際執行效率來說,並不見得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打開路徑成功
{
while (false !== ($file = readdir($handle)))//循環讀取目錄中的文件名並賦值給$file
{
if ($file != "." && $file != "..")//排除當前路徑和前一路徑
{
if (is_dir($path."/".$file))
{
// echo $path.": ".$file."<br>";//去掉此行顯示的是所有的非目錄文件
file_list($path."/".$file);
}
else
{
echo $path.": ".$file."<br>";
}
}
}
}
}
❹ 用兩種PHP方法實現1到100之間偶數之和
<?php
echoone(1,100);//方法一:使用for結構
echo" ";
echotwo(1,100);//方法二:使用while結構
echo" ";
echothree(1,100);//方法三:使用do...while結構
echo" ";
echofour(1,100);//方法四:使用遞歸函數
/**
*使用for結構
*@paramint$start開始
*@paramini$end結束
*
*@returnint和
*/
functionone($start=0,$end=0){
//判斷函數有效條件
if(($start==0&&$end==0)||($end<=$start))return0;
$num=0;
for($i=$start;$i<=$end;$i++){
if($i%2==0){//模運算
$num+=$i;
}
}
return$num;
}
/**
*使用while結構
*@paramint$start開始
*@paramini$end結束
*
*@returnint和
*/
functiontwo($start=0,$end=0){
//判斷函數有效條件
if(($start==0&&$end==0)||($end<=$start))return0;
$num=0;
$i=$start;//初始化增量$i
while($i<=$end){
if($i%2==0){//模運算
$num+=$i;
}
$i++;
}
return$num;
}
/**
*使用do...while結構
*@paramint$start開始
*@paramini$end結束
*
*@returnint和
*/
functionthree($start=0,$end=0){
//判斷函數有效條件
if(($start==0&&$end==0)||($end<=$start))return0;
$num=0;
$i=$start;
do{
if($i%2==0){//模運算
$num+=$i;
}
$i++;
}while($i<=$end);
return$num;
}
/**
*使用遞歸函數
*@paramint$start開始
*@paramint$end結束
*@paramint$i增量
*@paramint$num和
*
*@returnint和
*/
functionfour($start=0,$end=0,$i=0,$num=0){
//判斷函數有效條件
if(($start==0&&$end==0)||($end<=$start))return0;
static$i=1,$num=0;//將增量變數$i與統計和的變數$num設為靜態變數,保存每次計算後的結果並計入下一次計算中
if($i<=$end){
if($i%2==0){//還是模運算
$num+=$i;
$i++;
returnfour($start,$end,$i,$num);
}else{
$i++;
returnfour($start,$end,$i,$num);
}
}else{//$i>100,跳出遞歸,返回計算結果
return$num;
}
}
❺ php數組用foreach循環後,怎麼求和呢
解答過程如下:
1、$arr=array(1,2,3,5);//定義一個數組
2、$sum=0;//定義一個求和後的變數
3、foreach($arras$key=>$item){//foreach遍歷數組$key是鍵值,$item是元素值。
4、$sum+=$item; //這句和$sum=$sum+$item;是一個意思
5、}echo$sum;//輸出求和後的變數值
PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域。
(5)php遞歸求和擴展閱讀:
關於使用php的相關事項:
1、PHP的解釋運行機制:在 PHP 中,所有的變數都是頁面級的,無論是全局變數, 還是類的靜態成員,都會在頁面執行完畢後被清空。
2、設計缺陷,缺少關注PHP被稱作是不透明的語言,因為沒有堆棧追蹤,各種脆弱的輸入。沒有一個明確的設計哲學。
3、對遞歸的不良支持:PHP並不擅長遞歸。它能容忍的遞歸函數的數量限制和其他語言比起來明顯少。
❻ 用php實現1+(1+2)+(1+2+3)+...+(1+2+...n) 遞歸求和
function getSum($n) {
if ($n > 1) {
$tempSum = $n * (1 + $n) / 2; // 當然這此消部分可以拆成另一個遞歸來求和,派扒高如果有需要在說塵尺
return $tempSum + getSum(--$n);
}
else {
return $n;
}
}
$result = getSum(20);
❼ php遞歸的方法求和1+2+3+...+n
php遞歸碼和求和冊或1+2+3+...+n的方法如州模伍下:
function sum($n) {
if ($n == 1) {
return 1;
}
return $n + sum($n - 1);
}
echo sum(n);
❽ PHP怎麼遞歸
下面我舉一個其他的例子,雖然不是族譜,但是原理都是一樣的。
在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那麼PHP是如何實現無限級分類的呢?我們在本文中使用遞歸演算法並結合mysql數據表實現無限級分類。
遞歸,簡單的說就是一段程序代碼的重復調用,當把代碼寫到一個自定義函數中,將參數等變數保存,函數中重復調用函數,直到達到某個條件才跳出,返回相應的數據。
Mysql
首先我們准備一張數據表class,記錄商品分類信息。表中有三個欄位,id:分類編號,主鍵自增長;title:分類名稱;pid:所屬上級分類id。
class表結構:
CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入數據後,如圖:
如果要輸出json格式的數據,則可使用:
echo json_encode($list);