PHP中json编码前的数组合并
但是,PHP中json编码前的数组合并,php,json,Php,Json,但是,echo$finalJson的输出是一个对象,而不是3个 >你考虑使用ARRAY-PUP? array_push始终优于myArray[]=$value更新: 您的real问题取决于在关联数组上使用array\u merge。array\u merge的行为是重新分配重复键(如果它们是关联的(cf)): 如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值将不会覆盖原始值,而是追加 由于$myArray显然使用字符串作为键,因此$finalJ
echo$finalJson
的输出是一个对象,而不是3个 >你考虑使用ARRAY-PUP?
array_push始终优于myArray[]=$value更新:
您的real问题取决于在关联数组上使用array\u merge
。array\u merge
的行为是重新分配重复键(如果它们是关联的(cf)):
如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值将不会覆盖原始值,而是追加
由于$myArray
显然使用字符串作为键,因此$finalJson
中的值正在重新分配。您需要做的是在每次迭代中创建唯一的键,或者简单地将$myArray
的值推到一个数字索引的$finalJson
数组上(如我在下面的原始答案中所示)
问题很简单:
$finalJson = array_merge($finalJson, $myArray);
它位于循环内部,每次重新分配$myArray[“item”][“content”]
的值,而不是将其添加到数组中。我猜想您想做的是将其添加到循环的底部(对于$myArray
的每个新值):
然后,在下一次迭代中,
$myArray
将被重新分配,它的新值将被追加到$finalJson
变量中。我有一个棘手的问题
我所做的。
我从数据库的系统表(DEV,testprod setup)生成表的信息,VIE触发器…使用PHP,并将结果与JavaScript进行比较
另外,我还有一个文档数据库,用于获取额外的业务信息,它只在测试数据库上安装了一次
因此,我需要连接所有四个环境以获取数据
我用
如果($flag=='i')
用于系统数据库
结果是$row_数组和$info_数组必须合并并发送回Javascript
for information DB and
elseif ($flag === 's')
我在程序中的不同位置尝试此合并
第一次在elseif($flag==='i'){ 结果json:
$json_response = array_merge($rinfo, $rsql );
echo json_encode($json_response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
程序代码和结果可在以下位置下载:
希望您能帮助gert有什么不同?首选?它不首选
$array[]
。事实上,建议使用$array[]
!阅读“注意:如果您使用array\u push()向数组添加一个元素,最好使用$array[]=因为这样就没有调用函数的开销。”@jamieeason:cf我上面评论中的手册链接:没有区别,array\u push
没有区别preferred@EliasVanOotegem那么,我的确切问题是什么呢?我在挠头。反复分配它们只会返回1个对象,但为什么最终会得到3个对象呢?因为$finalJson
现在是一个数字索引数组,您可以只编写data.length
。对于对象,您可以使用Object.keys(anObject.length
或var i=0,p;For(p in Object){if(Object.hasOwnProperty(p))++i;}console.log(i);
@jamieeason:这可能吗?记住:JS数组是稀疏的(var-anArray=[1,2,3];
将有3个长度,anArray[123]=4;
导致anArray.length
为124,即使只有4个键可用set@jamieeason:data
是一个数组,而不是一个对象,因此data['item']
不起作用(它与data.item
相同)。请检查控制台,并记录变量console.log(数据)
,看看它的实际值是什么,试着找出为什么会出现你看到的行为(可能是一个对象,但它有自己的length
属性?@jamieeason:它不是一堆文本,而是一个JSON字符串,你必须解析它才能将其用作JS数组:data=JSON.parse(data);
,现在data
将是一个数组,并且data.length
将为您提供该数组的长度,data[0]。title
将为您提供该数组中第一个对象的标题值,等等。data.length
之前是27118,因为字符串由27118个字符组成:)@jamieeason:这取决于:如果您只是echo
输出中的json编码字符串(不带引号)(HTML/JS源文件中的php echo),则不需要解析它。如果您使用jQuery,并且发送了内容类型:application/json
头,jQ将为您解析它。如果字符串被引用,或者作为带有内容类型:text/plain
头的ajax响应发送,那么您必须首先解析字符串。很抱歉问这个问题,但我觉得我已经这样做了为了尽我最大的努力帮助你,你介意放弃我的答案来奖励我的努力吗
$finalJson[] = $myArray;
for information DB and
elseif ($flag === 's')
$json_response = array_merge($rinfo, $rsql );
echo json_encode($json_response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
[
{
"0": "ACT",……….
} ][ ]
second time after } //ifelse return also 2 arrays
[{"0":"ACT","1":"Tabelle Akten","2":"hh","3":null,"4":null,"5":"UCC","6":"Y","7":"Reload Data in Test","8":"y","9":"delete all older tha","10":"n","11":" ","12":"y","13":" ","14":"o","15":"y","16":"o","17":"y","18":"y","19":"Diese tabelle speichert die Acten Verweise","20":"Gert Dorn","21":1570254359,"TDESCRIPTION":"n","TTYPE":" ","TREC_ESTIM":"y","TREC_GROWTH":" ","TDOMAIN":"o","TREL_TYPE":"y","TREL_RULES":"o","THOUSEKEEPING":"y","THOUSE_RULES":"y","TCID":"Diese tabelle speichert die Acten Verweise","TCID_RULES":"Gert Dorn","TUSE_UCC":1570254359,"TUSE_DWH":"","TUSE_ODS":"","TUSE_CWF":"","TUSE_IWF":"","TUSE_OWF":"","TUSE_DEP_MANAGER":"","TENTITY_DESCRIPTION":"","TOWNER":""
,"TTIMESTAMP":""**}][{**"0":"ACT","1":"DB2INST1"
,"2":"USERSPACE1","3":null,"4":"2018-11-21 16:43:20.066567","5":"2018-12-07 10:12:10.255759","6":null,"7":"2020-03-26","8":"2018-11-21 16:43:20.343258","9":3,"NAME":"ACT","CREATOR":"DB2INST1","TBSPACE":"USERSPACE1","REMARKS":"","CTIME":"2018-11-21 16:43:20.066567","STATS_TIME":"2018-12-07 10:12:10.255759","STATISTICS_PROFILE":"","LASTUSED":"2020-03-26","ALTER_TIME":"2018-11-21 16:43:20.343258","COLCOUNT":3}]