❶ 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);