PHP函数参数为数组时输出图形的问题 20C

我的PHP程序中,函数DrawLineChar($CR_Sum,$date_list)中的参数$CR_Sum和$date_list如果在主程序中定义为常量(如程序一所示),那么折线图是正确可以显示的。但是如果在主程序中将参数设为变量(是调用其他函数的返回值)时,那么图形就显示不出来,只显示一个黑色背景(我调试时,发现这两个参数如果在函数DrawLineChar()中用print_r()函数打印是可以输出到浏览器的),(如程序二所示)。请问这是什么原因
下面是我的程序
程序一:
<?php
function DrawLineChar($CR_Sum,$date_list)
{
include("/usr/share/php/jpgraph/src/jpgraph.php");
include("/usr/share/php/jpgraph/src/jpgraph_line.php");
#print_r($CR_Sum);
#print_r($date_list);
$graph = new Graph(500,300);
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->img->SetMargin(60,30,30,70);

$graph->graph_theme = null;

$lineplot1=new LinePlot($CR_Sum);

$lineplot1->value->SetColor("red");
$lineplot1->value->Show();
$graph->Add($lineplot1);

$graph->title->Set("CR Line Charts");
$graph->xaxis->title->Set("Date");
$graph->yaxis->title->Set("Number");
$graph->title->SetMargin(10);
$graph->xaxis->title->SetMargin(10);
$graph->yaxis->title->SetMargin(10);
//$date=array_keys($date_list_para);
$graph->xaxis->SetTickLabels($date_list);

$graph->Stroke(); //输出图像
}
$date_list_para=array(
'2018-05-06',
'2018-05-07',
'2018-05-08',
'2018-05-10',
'2018-05-11'
);
$CR_Sum_para=array(
2,3,4,5,6);
DrawLineChar($CR_Sum_para,$date_list_para);
?>

程序二
<?php
include ("ConnDB4.php");
include("CRSumV3.php");
include("CRDatProv5.php");
include("FetchCRPerDayv4.php");
include("DateListv2.php");
function DrawGraLineDate($CR_Sum,$date_list)
{
include("/usr/share/php/jpgraph/src/jpgraph.php");
include("/usr/share/php/jpgraph/src/jpgraph_line.php");
#print_r($CR_Sum);
#print_r($date_list);
$graph = new Graph(500,300);
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->img->SetMargin(60,30,30,70);
$graph->graph_theme = null;
$lineplot1=new LinePlot($CR_Sum);
$lineplot1->value->SetColor("red");
$lineplot1->value->Show();
$graph->Add($lineplot1);
$graph->title->Set("CR Line Charts");
$graph->xaxis->title->Set("Date");
$graph->yaxis->title->Set("Number");
$graph->title->SetMargin(10);
$graph->xaxis->title->SetMargin(10);
$graph->yaxis->title->SetMargin(10);
$graph->xaxis->SetTickLabels($date_list);
$graph->Stroke(); //输出图像
}
ConnDB4();
$taskID=$_POST['taskID'];
$orig_date_list=CRDatPro($taskID);
$original_CR=FetchCRPerDay($taskID);
$date_list_para=DateList($orig_date_list);
$CR_sum_para=CR_Sum($original_CR);
DrawGraLineDate($CR_sum_para,$date_list_para);
?>

2个回答

首先看一下图2的变量 $CR_sum_para, ,$date_list_para的值是否和图一自己定义的值一致,如果不一致,要通过修改$_POST数据的方式模拟到一致
此时如果还是有问题的话,逐个删除
include ("ConnDB4.php");
include("CRSumV3.php");
include("CRDatProv5.php");
include("FetchCRPerDayv4.php");
include("DateListv2.php");
直到图一和图二的输出的图像一致,保持一致后,查看上一个删除的include里面的逻辑,是不是有什么错误的操作

jszy_jin
jszy_jin 我的参数$CR_Sum_para,$date_list_para的值用print_r输出如下:Array ( [0] => 2 [1] => 3 [2] => 5 [3] => 6 [4] => 7 [5] => 10 [6] => 12 [7] => 13 [8] => 14 );Array ( [0] => 0817 [1] => 0818 [2] => 0819 [3] => 0822 [4] => 0823 [5] => 0824 [6] => 0830 [7] => 0901 [8] => 0902 ) 。由于$_post的数据用来实际获取的数据库中数据的参数,我无法调整数据库的数据,使其和图一的数据一致,所以我把图一中定义的数组改成前面图二中提到的输出数据,这时是可以画出图像的。几个头文件如果注释掉,图二程序将无法运行,之前也逐一调试过,是可以正确运行并返回变量$CR_Sum_para,$date_list_para的。请问还应如何调试呢
大约一年之前 回复
jszy_jin
jszy_jin 我的参数$CR_Sum_para,$date_list_para的值用print_r输出如下Array ( [0] => 0817 [1] => 0818 [2] => 0819 [3] => 0822 [4] => 0823 [5] => 0824 [6] => 0830 [7] => 0901 [8] => 0902 ) Array ( [0] => 2 [1] => 3 [2] => 5 [3] => 6 [4] => 7 [5] => 10 [6] => 12 [7] => 13 [8] => 14 )
大约一年之前 回复

应该是查询数据库数据有问题,以下是我的模拟过程,你自己看看:
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明

jszy_jin
jszy_jin 回复graceminc:可否加个微信,解决这个问题 ?
大约一年之前 回复
graceminc
graceminc_粒子 回复jszy_jin: 这样,如果你确实想解决这个问题,我建议你重新提.你需要把问题报错的现象;自己尝试的操作;尝试的结果都写出来.否则,我也很难说清楚具体问题在哪.
大约一年之前 回复
jszy_jin
jszy_jin 查询数据库的数据会有什么问题呢?检查过函数返回的值$CR_Sum_para和$date_list_para数组值的类型和数值和直接在主程序中定义的值是一样的,还会是哪里的问题呢?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
数组作为函数参数时的问题
C#2005 WinFormrnint n[] = 1,2;rnMyMethod(n);rn这样是可以的rnrnMyMethod(1,2);rn这样却是不可以的,有什么办法实现类似这样的功能呢?
函数参数为数组时如何声明函数。
我做了一个函数,对数组中的信息进行排序,可是函数如何传递数组呢。请各位高手帮忙解决。我用function sortInfo(a[]),声明可是不对。rn
接收整型数组为函数参数
要写一个函数比较七个整数中的最大值rnrnmain() rn...rnint a[7] = 1, 3, 2, 10, 11, 13, 9;rnprintf("[%d]\n", getMax(a[7], 7));rn...rnrnrnint getMax(int a[], int b) rn int i, value;rn i = 0;rn value = a[0];rn for (i = 0; i < b - 1; i++) rn printf("a[%d]=[%s] a[%d]=[%s]\n", a[i], a[i+1]);rn if (a[i] < a[i+1]) rn value = a[i+1]; rn rn rn return value;rnrnrn为啥不行呢?
C++函数参数为数组时的问题,复制还是指针?
众所周知,函数在传参数时会复制参数,但传指针时,只是复制了指针本身,而没有复制指针指向的值,所以可以通过传指针或引用来使函数内可以修改外部的值。那么,对于数组,会怎样? 上测试程序 #include&amp;lt;iostream&amp;gt; #include&amp;lt;typeinfo&amp;gt; using namespace std; void func(int arr[]){ arr[0]=1...
关于函数参数为指向数组的指针的问题。
我想通过一个函数显示一个不定数组中的各元素。实现如下:但老是只能显示数组的第一个无素,其它都不显示了,请问是什么原因。我不想在主调函数中传入数组元素个数过去(因在Delphi中不用)。rnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn int a[]=2,3,6,5,8;rn int i=disp(&a);rn this->Caption=IntToStr(i);//返回的数组元素个数老是为1rnrnrnint disp(int (*p)[])rnrn for (int i=0;iMemo1->Lines->Add((*p)[i]); //只显示第一个元素rn rn return sizeof(p)/sizeof((*p)[0]);rnrn以上不用函数则没问题。
PHP 数组输出显示的问题
Array ( [0] => Array ( [0] => Array ( [ID] => 2IT14035A ) [1] => Array ( [ID] => 5IE14032S ) [2] => Array ( [ID] => 1IE15003B ) [3] => Array ( [ID] => 1IE15010C ) ) [1] => Array ( [0] => Array ( [ID] => 1IE14210D ) [1] => Array ( [ID] => 1IE15001A ) [2] => Array ( [ID] => 1IT15001G ) [3] => Array ( [ID] => 1IT14033S ) ) ) rn这是被分为两个组的数据,键值【0】和【1】里面分别又有3个数据rn现在想分开显示rn第一组:(键值为0的)2IT14035A, 5IE14032S,1IE15003B,1IE15010Crn第二组:(键值为1的)1IE14210D,1IE15001A, 1IT15001G,1IT14033Srn该怎么办呢 rn谢谢大家
数组当函数参数时,所带来的问题?
今天写了一个小deamon,利用二维数组,当函数参数,用于获取子函数传出来的字符串,发现在主函数里,就是打印不出来字符串 #include                                                                   #include                                                    
关于输出函数参数的问题
[code=C/C++]rn#includernusing namespace std;rnvoid a(int a);rnint main()rnrn int b;rn a(b);rn cout<
◆字符串输出为数组问题
假如有一字符串:a;001;002;003;004;b;001;002rn我想实现如下输出功能:rnarn001 002 003rn004rnbrn007 008rnrn在HMTL即是:rn rn arn 001 002 003rn 004rn brn 007 008rnrn以下是我写的函数,但变成了如下显示:rnarnbrna 001 002 rn003 004rnb 007 008rnrn我不知道错在那了,请帮我分析修改下,谢谢..
dll输出函数参数问题
PUSH 004EED38 ; ASCII "AA10"rnLEA ECX,DWORD PTR SS:[EBP-14]rnCALL rnMOV DWORD PTR SS:[EBP-4],0rnLEA EAX,DWORD PTR SS:[EBP-14]rnPUSH EAX ; 地址为EAX的内容为"AA10"rnCALL rnADD ESP,4rnTEST EAX,EAXrnJNZ SHORT 00418257rnrn问题1:dll输出函数怎么可以有?和@rn问题2:我写的下面的函数编译完后,将dll文件用ultraedit将函数名改成?Check@@YAHPAVCString@@@Z后,显示的为何是乱码。rnextern "C" _declspec ( dllexport ) BOOL _Check__YAHPAVCString___Z(char* s)rnrn AfxMessageBox(s);rn return 1;rnrnrn请大虾们指点,万分感激
函数对象为构造函数参数时
namespace non_virtual_interface2 {class base; int default_health_calc(const base& gc) { } class base { public: typedef std::function health_calc_func; explicit base(health_calc_func hcf=defaul
函数参数为自定义数据类型时的问题
我在组件里的类里的一个函数用了自定义数据类型为参数,在前台的程序里调用这个组件对象的这个函数时出现编译错误,说只有定义在公共对象模块中用户定义类型和变体类型相互转换或传递给后期绑定功能。rn不明白什么意思,如果解决呢?(我已经在前台程序里定义和组件里一样的那个自定义的数据类型)
DLL问题:函数参数为double时出现异常!
提示不能访问地址,参数类型为指针变量。
数组作为函数参数的问题
现在一BYTE数组A(25) ,要求写一函数SUM(), 通过此函数 将A数组中连续的某几个元素传入函数,而后将这几个元素的部分连续单元求和 并将结果通过参数F返回rnrnSUMA的实现方式分两种,调用形式分别如下rnrn1、call SUMA(A(),D,E,F) D为求和元素中的第一个元素的索引号,E为求和元素的个数 ,F存放求和结果 rnrn1、call SUMA(A(3),8,F) 从A(3)开始的8个单元求和,F存放求和结果 这是调用形式,当然第一个参数也可能是A(5) A(6)等,第二个参数不一定是8,当然也可以是9,10等其他值 。rn
数组作函数参数的问题
rn__value enum Color Red = 0, Green = 1, Yellow = 2 ;rnrn__gc class Block rn int id;rn Color color;rn;rnrn__gc class ABC rnrnpublic:rnrn void Test(Block block[])rn rn for (int i=0; iLength; i++) rn if (block[i].color == Color::Red) ... rn rn rn;rn......rnrn以上代码编译过不去,老是说什么Block是否忘记了'*',还有什么私有成员color的错误,都是什么问题啊?
数组做为函数参数的问题
函数的原型为int pipe(int filedes[2]);rnrn调用函数时为何使用数组首地址做为入参?rn即pipe(filedes)或pipe(&filedes[0])rn而不使用pipe(filedes[2])
数组作为函数参数的问题?
int a[10];rn两种函数定义:rnvoid (int array[],int size)rnrnvoid (int *array,int size)rnrn这两种方法有什么区别呢?
php【数组对比输出】
[code=php]rn$array1=array("1","2","3","4","5","6");//此数据值固定。rn$array2=array("1","3","6","4");//此数据值不固定。rn[/code]rn[color=#FF0000]实现效果:[/color]rnarray2与array1对比后array2没有的值用0代替。rn结果:rn1,0,3,4,0,6rnrn请问怎么实现
PHP 数组逆向输出
&amp;lt;?php header(&quot;Content-Type: text/html; charset=utf-8&quot;); function index() { //数组逆向输出 $data = ['你好','123','好好','谢谢']; $value = []; for($i = count($data)-1; $i&amp;gt;=0; $i--){ ...
PHP 数组---输出
和数组的创建一样,数组的输出显示也有三种方法。 一。for循环 &amp;lt;?php $ms_office = array( 'word', 'excel', 'outlook', 'access' ); for($i=0; $i&amp;lt;4; $i++) { echo &quot;数组第&quot;.(...
PHP优雅的输出数组
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;?php echo 'gogogo'; for($i=1;$i&lt;=5;$i++){ echo "&lt;br&gt;num".$i."qwe&lt;br&gt;"; } $arr = array(1, 2, 3, 4); foreach ($arr as &amp...
php输出数组
例如: 有以下这样子的一个数组 错误的输出方法 echo $modelT[shoukuankehudanwei] 出现以下报错: 正确的输出方法 echo $modelT[shoukuankehudanwei]; 这里要注意,因为键值对中,键是字符串,因此不能直接填shoukuankehudanwei,因为这时候会将其当作一个变量,因此要用引号将shoukuankehudanwei包起...
从PHP函数参数为数组和对象的区别说开去
从PHP函数参数为数组和对象的区别说开去 从PHP函数形式参数为数组和对象的区别说开去,首先比较一下函数的参数为数组和对象的区别,然后由此说开,谈谈变量的底层结构,对象的底层结构,hashTable的底层结构。 函数参数为数组和对象的区别 变量的底层结构 对象的底层结构 *HashTable —PHP的灵魂 函数参数为数组和对象的区别 先写一个不算很好的例子但是足够说明问题了。...
PHP 文件上传时返回为空数组
PHP 文件上传时打印$_FILES,返回为空数组array(0){} 出现的问题可能是在表单中没有写 enctype=&quot;multipart/form-data&quot;  
函数参数为引用的问题
这是一个对单链表L进行升序排序的函数,思想是新建一个空链表head1和一个结点S,将L的结点复制到s,如果head1为空,或者head1的头结点比s中的值要大,则将s前插入head1,否则对head1进行遍历,寻找合适的地方插入。rnvoid SortUp(Linklist *&L)rnrn Linklist *head1,*p,*q,*s,*r;rn head1=NULL;rn p=L;rn while(p!=NULL)rn rn s=(Linklist*)malloc(sizeof(Linklist));rn s->next=NULL;rn s->data=p->data;rn if(head1==NULL||head1->data>s->data) //前插rn rn s->next=head1;rn head1=s;rn rn else //后插rn rn q=head1;rn r=q;rn while(q!=NULL&&q->datadata)rn rn r=q;rn q=q->next;rn rn s->next=r->next;rn r->next=s;rn rn p=p->next;rn rn L=head1;rnrnrn函数本身没有问题,我的问题是如果将函数的参数L不用引用,直接用Linklist *L,为什么调用该函数后L不会发生任何改变?L传递的是指针,应该会有所改变啊?
函数参数为ref的问题
using System;rnusing System.Collections.Generic;rnusing System.Text;rnrnrnnamespace Testrnrn class WrappedIntrn rn public int n;rn rn rn class Passrn public void fn1(WrappedInt x)rn x.n=2;rn rn public WrappedInt fn2(WrappedInt x)rn x=new WrappedInt();rn x.n=2;rn return x;rn rn public WrappedInt fn3(ref WrappedInt x)rn x=new WrappedInt();rn x.n=2;rn return x;rn rnrnrnrn class Programrn rn static void Main()rn Pass sc=new Pass();rn WrappedInt x=new WrappedInt();rn x.n=9;rn WrappedInt y=x;rn rn sc.fn1(x); rn // y=sc.fn2(x);rn // y=sc.fn3(ref x);rn rn Console.WriteLine("x.n="+x.n);rn Console.WriteLine("y.n="+y.n);rn rnrnrn上面的程序运行结果为:rnx.n=2rny.n=2rn对于这个结果我理解为:传递给函数fn1()的是一个对象的引用,调用前x和y是指向的同一个实例,调用完fn1()后,x和y还是指向这个实例,只不过这个实例的成员n=2;rnrnrn改动<1>:rn如果把Main()中sc.fn1(x);语句改为y=sc.fn2(x);程序结果为:rnx.n=9rny.n=2rn对于这个结果我理解为:在函数fn2()中用new生成了一个WrappedInt实例,fn2返回这个新生成实例的引用并把这个引用传递给y.调用完fn2()后,Main()中x和y就指向了两个不同的实例.rnrnrn改动<2>:rn如果把Main()中sc.fn1(x);语句改为y=sc.fn3(ref x);程序结果为:rnx.n=2rny.n=2rn对于这个结果我预计错了,我先前认为应该与改动<1>的结果一样,因为传递给函数的参数如果是类类型则传递的是这个类型对象的引用,在这种情况下fn3函数定义参数前要不要ref关键字都一样.rnrn请哪为高人帮忙分析一下改动<2>的结果是怎么来的?在参数是类类型的情况下添加与不添加ref有什么区别?
关于将程序界面输出为图形的问题
请教:在窗体上布置好控件并在代码窗口中写完代码后,请问能编辑代码将窗体界面输出为图形(如格式为.jpg或.bmpg)保存吗???如若此法不行,那怎么才能将窗体界面输出为图形呢(窗体上原来设计有很多各种控件)????万分感谢,望赐教!!!!!!
PHP函数参数
1. 可变参数列表 // 实现方式1: // func_num_args() // func_get_arg() // func_get_args() #例如 function sum1(){ $sum = 0; $nums = func_num_args(); if($nums == 0){ return $sum; ...
函数参数为数组,如何赋默认值
int fun(int* arr,int n=1);rnrn要求arr也赋默认值,为一个元素的常量1rn要怎么写?
数组作函数参数退回为一个指针
【数组作函数参数 退回为一个指针】1 正确做法:把数组的内存首地址和数组的有效长度传给被调用函数2 实参a 和 形参a 的数据类型本质不一样形参中的数组 ,编译器会把它当成指针处理——这是C语言的特色。只会分配四个字节(所分配连续内存空间的首元素的地址)的内存,不会分配4*7个字节的内存void sortArray(int a[7], int num)3 形参写在函数名后面的括号()里,和写在函数...
数组的引用做函数参数的问题
可以用CString数组的引用做函数的入口参数吗?!rn定义的时候如何写啊?!rnrn谢谢!!!!!!!!!!!1
关于数组做为函数参数的问题
小弟最近想用二维数组做为函数参数,rn谁能告诉我有哪几种实现的方法呀!最好举个例子.rn保证给分!
对于数组作为函数参数的问题
在C#中编写函数,把数组作为函数的参数,使用ref、out和不使用这些关键字有什么样的区别,为什么不用ref和out也可以把传入的数组中的内容改变?
数组做函数参数的退化问题
冒泡排序 #include &quot;stdlib.h&quot; #include &quot;string.h&quot; #include &quot;stdio.h&quot; void printArray(int* a) { for (size_t i = 0; i &amp;lt; 6; i++) { printf(&quot;%d\n&quot;, a[i]); } } // -----------(int a[]) void sortAarr...
函数参数是多位数组的问题
char 的多位数组如何用指针实现函数参数的传递?(主要是想实现用指针传递字符串)rn例如:rnchar abc[2][] = "fdsfds","fasdfsa";rn如何传递abc?rnrn再一个将一个字符串拆分成多个字符串时,保存在字符串数组中时,数组如何声明?(既无法初始化)
数组作为函数参数的指针问题
数组指针问题
使用数组做函数参数的问题
有一个三维数组string[,,] arr=new string[10,10,10];rn有一个函数func(string[] ss)rnrn不知道是哪个语言了,我好像记得可以这样传func(arr[1,1])rnrn就是把其中的一维给传进去rnrnc#可以这样吗?
数组作为函数参数范围问题
新学编程,rn遇到了一个问题:红色部分关于irnrn#define MAXLINE 10 /* 允许输入的最大长度 */rnrnint getline(char line[], int maxline); rnvoid copy(char to[], char from[]);rnrn/* 打印最长的输入行 */rnint main(void)rnrn int len;rn int max;rn char line[MAXLINE];rn char longest[MAXLINE];rnrn max = 0;rn while ((len = getline(line, MAXLINE)) > 0)rn if (len > max)rn max = len;rn copy(longest, line);rn rn if (max > 0)rn printf("%s", longest);rn return 0;rnrnrnrn/* getline函数: 将一行读入大到s中并返回其长度 */rnint getline(char s[], int lim)rnrn int c, i;rnrn for (i=0; [color=#FF0000]i
C++图形输出问题
编程实现输出以下图形:rnn=1 1rn 4 5 2rn 3rnn=2 1 2rn 8 9 10 3rn 7 12 11 4rn 6 5rnn=3 1 2 3rn 12 13 14 15 4rn 11 20 21 16 5rn 10 19 18 17 6rn 9 8 7rnn=4 1 2 3 4rn 16 17 18 19 20 5rn 15 28 29 30 21 6rn 14 27 32 31 22 7rn 13 26 25 24 23 8rn 12 11 10 9
windows的图形输出问题
windows的图形输出的过程中,有好几个坐标空间的转化.这样转换来转换去的,我都搞晕了.这到底是怎么回事啊
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池