Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取此对象中的结果数?_Php_Jquery_Arrays_Object - Fatal编程技术网

Php 如何获取此对象中的结果数?

Php 如何获取此对象中的结果数?,php,jquery,arrays,object,Php,Jquery,Arrays,Object,我有一篇ajax文章,它将JSON转换为如下所示 {"0":{"Project_ID":"1","Project_Name":"TEST 1"...}, "1":{"Project_ID":"1","Project_Name":"TEST...etc.` 可以使用result[0]['which Key']或result[1]['which Key']访问的对象。考虑到我的查询只获取了一个项目的信息,大多数数据都是相同的,但我有多个结果的原因是我有适合多个位置或成本中心类别的数据,等等 我不

我有一篇ajax文章,它将JSON转换为如下所示

{"0":{"Project_ID":"1","Project_Name":"TEST 1"...},
 "1":{"Project_ID":"1","Project_Name":"TEST...etc.`
可以使用
result[0]['which Key']
result[1]['which Key']
访问的对象。考虑到我的查询只获取了一个项目的信息,大多数数据都是相同的,但我有多个结果的原因是我有适合多个位置或成本中心类别的数据,等等

我不确定如何遍历结果的数量,并在for循环中使用该数字来填充表中的所有值,而不仅仅是索引
[0]
中的值

脚本如下所示:

echo "<script type'text/javascript'>
$('#result_year').change(function(event) {
$.post('info.php', { selected_project: $('#selection_project option:selected').val(), selected_year: document.getElementById('result_year').value},
    function(data) {
        var result = JSON.parse(data);
        //maybe an $.each loop here? or
        //for(var i=0; i<result.length; i++) <--(but NOT the length, the number of rows?)
        var location = result['Location'];
        var cccName = result['Cost_Center_Category_Name'];
        var ccName = result['Cost_Center_Name'];
        var Q_1 = result['Q_1'];
        var Q_2 = result['Q_2'];
        var Q_3 = result['Q_3'];
        var Q_4 = result['Q_4'];
        $('.editable').empty();
        document.getElementById('MQ'+location+cccName+ccName+'Q_1').innerHTML=Q_1;
        document.getElementById('MQ'+location+cccName+ccName+'Q_2').innerHTML=Q_2;
        document.getElementById('MQ'+location+cccName+ccName+'Q_3').innerHTML=Q_3;
        document.getElementById('MQ'+location+cccName+ccName+'Q_4').innerHTML=Q_4;
        } 
    );            
}); 
</script>;";
echo”
$(“#结果_年”)。更改(功能(事件){
$.post('info.php',{selected_project:$('selected#selection_project option:selected').val(),selected_year:document.getElementById('result#year').value},
功能(数据){
var result=JSON.parse(数据);
//也许每个循环一美元?或者
//对于(var i=0;i您在完成数据库获取后向数组添加字符串键,从而“破坏”了数组:

$results['selected_year'] =  ...
Javascript数组只能有连续的数字键。只要数组索引中有间隙,或者数组中有非数字键,json_encode()就会被强制生成JS对象,因为其他任何内容都是非法/无效的Javascript/json

如果要将结果填充到数组中并将其保留为数组,则不要使用字符串键“共享”数据:

$data = array();
while (...) {
    $data[] = ... fetch from db ...
}

$results = array();
$results['selected_year'] = ...;
$results['data'] = $data;    // put results into its own child array
然后,JS代码中的
data['data']
将是一个数组,您可以
.length
它。

在完成数据库获取后,通过向数组中添加字符串键来“破坏”数组:

$results['selected_year'] =  ...
Javascript数组只能有连续的数字键。只要数组索引中有间隙,或者数组中有非数字键,json_encode()就会被强制生成JS对象,因为其他任何内容都是非法/无效的Javascript/json

如果要将结果填充到数组中并将其保留为数组,则不要使用字符串键“共享”数据:

$data = array();
while (...) {
    $data[] = ... fetch from db ...
}

$results = array();
$results['selected_year'] = ...;
$results['data'] = $data;    // put results into its own child array

然后,JS代码中的
data['data']
将是一个数组,您可以
.length
它。

问题是,您将数据库记录与所选年份和项目的元数据混合到同一个PHP数组中。将记录放入嵌套数组中,这样您就可以对它们进行循环

while($row = $result->fetch_assoc()){
    $data[] = $row;
}
$results['selected_year'] = $selected_year;
$results['selected_project'] = $selected_project;
$results['data'] = $data;
$response = json_encode($results);

echo $response;

然后在jQuery代码中,您可以使用
result.data.length
获取记录的数量,并使用
$.each(result.data,function(index,row){…}循环它们;

问题在于,您正在将数据库记录与所选年份和项目的元数据混合到同一个PHP数组中。请将这些记录放入嵌套数组中,以便循环使用

while($row = $result->fetch_assoc()){
    $data[] = $row;
}
$results['selected_year'] = $selected_year;
$results['selected_project'] = $selected_project;
$results['data'] = $data;
$response = json_encode($results);

echo $response;

然后在jQuery代码中,您可以使用
result.data.length
获取记录数,并使用
$循环它们。每个(result.data,function(index,row){…};

表示了解语句。即使是也不安全!@JayBlanchard哦,不!我会立即这样做!
$。每个(result,function(key,object)…)
首先你是如何得到一个对象的?你应该得到一个数组。它应该是
[{“Project\u ID”:“1”,“Project\u Name”:“TEST 1”…},{“Project\u ID”:“1”,“Project\u Name”:“TEST…etc.”
说要了解的语句。甚至是不安全的!@JayBlanchard哦,不!我会马上做的!
$。每个(结果,函数)(键,对象)…)
你首先是如何得到一个对象的?你应该得到一个数组。它应该是
[{“项目ID”:“1”,“项目名称”:“测试1”…},{“项目ID”:“1”,“项目名称”:“测试…等等]
那么,当我进行json_编码时,我是否将两个数组都放在括号内?伟大的思想都是一样的,我们甚至想出了相同的变量名:)因此,当我进行json_编码时,我是否将两个数组都放在括号内?伟大的思想都是一样的,我们甚至想出了相同的变量名:)我现在已经把这些都放在里面了,括号里以
var location=result[0]['location'];var cccName…等开头的东西还能用吗?
还是应该把
result[index]
或什么的?所有的行都移到
result.data
,所以它变成
result.data[0].Location
。但是在
$中。每个
循环都是
行。Location
。我现在已经把这些都放在那里了,括号中以
var Location=result[0]['Location'];var cccName…等开头的内容是否仍然有效?或者我应该把
result[index]放进去吗
或其他什么?所有的行都被移动到
结果.data
,因此它变成
结果.data[0].Location
。但是在
$中。每个
循环都是
行.Location