PHP的:array_filter改变了数据格式 [英] Php: array_filter changes data format

查看:370
本文介绍了PHP的:array_filter改变了数据格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在code下面我希望

  T2:[{值:.....},{},{}]

而是我得到

  T2:{0:{值:,...,1:{},..}

甚至铸造

  json_en code((阵列)$ T2);

不使其工作结果
THX

 函数滤波器($ VAR){
    返回($ VAR-> ID 4;);
}$t1=json_de$c$c('[{\"value\":\"\",\"id\":\"0\",\"key\":\"algo\"},{\"value\":\"0.8\",\"id\":\"-1\",\"key\":\"cout\"},{\"value\":\"2012-07-21\",\"id\":\"3\",\"key\":\"date\"},{\"value\":\"\",\"id\":\"0\",\"key\":\"europe\"},{\"value\":\"\",\"id\":\"0\",\"key\":\"inria\"},{\"value\":\"1\",\"id\":\"4\",\"key\":\"ndOfRates\"},{\"value\":\"part\",\"id\":\"0\",\"key\":\"offre\"},{\"value\":\"\",\"id\":\"0\",\"key\":\"paris\"},{\"value\":\"Ut enim quisque思碧plurimum confidit等UT quisque马克西姆virtute等上智编译原文munitus EST,UT nullo egeat suaque OMNIA在本身IPSO posita iudicet,ITA在amicitiis expetendis colendisque马克西姆excellit。英镑enim?非洲种indigens妹? MINIME大力士! AC NE自我quidem illius; SED自我admiratione quadam virtutis eius,伊勒vicissim的意见了fortasse非法无,华富德MEIS moribus habebat,我dilexit; auxit benevolentiam consuetudo。桑达quamquam utilitates multae等magnae consecutae必须遵守,非必须遵守tamen AB earum SPE causae diligendi profectae。海duae provinciae战时quondam piratico catervis mixtae praedonum一个Servilio亲consule missae子iugum factae必须遵守vectigales。等HAE quidem regiones velut在prominenti terrarum通用菊科腾奥尔布EOO蒙天野disparantur。终极Syriarum EST Palaestina每intervalla麦格纳protenta,cultis量丰度terris等nitidis等civitates habens quasdam egregias,nullam缺体cedentem SED思碧vicissim velut广告perpendiculum aemulas:Caesaream,华富国际广告名誉上Octaviani落叶松exaedificavit Herodes等Eleutheropolim等Neapolim itidemque Ascalonem Gazam aevo SUPERIORE exstructas。事后impie perpetratum狴在aliis quoque IAM timebatur,tamquam licentia crudelitati indulta每suspicionum星云aestimati QUIDAM noxii damnabantur。定额标准杆necati,alii puniti bonorum multatione actique laribus猪extorres nullo思碧relicto praeter querelas等lacrimas,菌柄conlaticia victitabant,由伊朗伊斯兰共和国等IMPERIO iustoque广告voluntatem converso cruentam,claudebantur opulentae多莫斯等clarae。在capite蒙迪morborum acerbitates摄氏度dominantur,广告权交易韦尔sedandos OMNIS professio medendi torpescit,​​excogitatum EST adminiculum sospitale nequi amicum perferentem similia videat,additumque EST cautionibus paucis补位aliud SATIS validum,UT famulos percontatum missos截止日广告莫迪姆Valeant公司的NotI等quoniam APUD EOS UT HAC aegritudine colligati,非事前recipiant domum华富lavacro purgaverint语料库。 ITA etiam alienis oculis签证metuitur LABES,ID:4,重点:文本},{值:上,ID:0,重点:类型}]');$ T2 = array_filter($ T1,过滤器);回声'T2:'.json_en code($ T2);


解决方案

在PHP中,有关联和数字数组之间没有什么区别。因此,转换为JSON时, json_en code 有从阵列的按键来推断是否应该带codeD作为数组或对象。它通过测试,看看这是否如(一)项的数字和(b),如果他们是连续的,首先是 0 ;如果两个测试通过,这将是连接codeD作为数组。

当您使用 array_filter ,你删除一些按键。在其他人不重新编号,所以密钥不再连续。这意味着 json_en code 推断,这应该是一个对象,而不是阵列时,连接在JSON codeD。

您可以将该条重键更正。使用 array_values​​ 来做到这一点:

 回声'T2:'.json_en code(array_values​​($ T2));

In the code below I would expect

t2: [{"value":"".....}, {}, {}]

but instead I get

t2: {"0":{"value":"",.. , "1":{}, .. }

even casting

json_encode( (array) $t2);

doesn't make it work
thx

function filter($var) {
    return($var->id < 4);
}

$t1=json_decode('[{"value":"","id":"0","key":"algo"},{"value":"0.8","id":"-1","key":"cout"},{"value":"2012-07-21","id":"3","key":"date"},{"value":"","id":"0","key":"europe"},{"value":"","id":"0","key":"inria"},{"value":"1","id":"4","key":"ndOfRates"},{"value":"part","id":"0","key":"offre"},{"value":"","id":"0","key":"paris"},{"value":"Ut enim quisque sibi plurimum confidit et ut quisque maxime virtute et sapientia sic munitus est, ut nullo egeat suaque omnia in se ipso posita iudicet, ita in amicitiis expetendis colendisque maxime excellit. Quid enim? Africanus indigens mei? Minime hercule! ac ne ego quidem illius; sed ego admiratione quadam virtutis eius, ille vicissim opinione fortasse non nulla, quam de meis moribus habebat, me dilexit; auxit benevolentiam consuetudo. Sed quamquam utilitates multae et magnae consecutae sunt, non sunt tamen ab earum spe causae diligendi profectae. Hae duae provinciae bello quondam piratico catervis mixtae praedonum a Servilio pro consule missae sub iugum factae sunt vectigales. et hae quidem regiones velut in prominenti terrarum lingua positae ob orbe eoo monte Amano disparantur. Ultima Syriarum est Palaestina per intervalla magna protenta, cultis abundans terris et nitidis et civitates habens quasdam egregias, nullam nulli cedentem sed sibi vicissim velut ad perpendiculum aemulas: Caesaream, quam ad honorem Octaviani principis exaedificavit Herodes, et Eleutheropolim et Neapolim itidemque Ascalonem Gazam aevo superiore exstructas. Post hoc impie perpetratum quod in aliis quoque iam timebatur, tamquam licentia crudelitati indulta per suspicionum nebulas aestimati quidam noxii damnabantur. quorum pars necati, alii puniti bonorum multatione actique laribus suis extorres nullo sibi relicto praeter querelas et lacrimas, stipe conlaticia victitabant, et civili iustoque imperio ad voluntatem converso cruentam, claudebantur opulentae domus et clarae. Et quoniam apud eos ut in capite mundi morborum acerbitates celsius dominantur, ad quos vel sedandos omnis professio medendi torpescit, excogitatum est adminiculum sospitale nequi amicum perferentem similia videat, additumque est cautionibus paucis remedium aliud satis validum, ut famulos percontatum missos quem ad modum valeant noti hac aegritudine colligati, non ante recipiant domum quam lavacro purgaverint corpus. ita etiam alienis oculis visa metuitur labes.","id":"4","key":"text"},{"value":"on","id":"0","key":"type"}]');

$t2 = array_filter($t1, "filter");

echo 't2: '.json_encode($t2);

解决方案

In PHP, there is no difference between associative and numeric arrays. Therefore, when converting to JSON, json_encode has to infer from the array's keys whether it should be encoded as an array or an object. It does this by testing to see if (a) the keys are numeric and (b) if they are sequential, starting with 0; if both tests pass, it will be encoded as an array.

When you use array_filter, you remove some of the keys. The others are not renumbered, so the keys are no longer sequential. This means that json_encode infers that this should be an object rather than an array when encoded in JSON.

You can correct this by renumbering the keys. Use array_values to do this:

echo 't2: '.json_encode(array_values($t2));

这篇关于PHP的:array_filter改变了数据格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆