J'ai trébuché sur un insecte obscur qui m'a pris beaucoup de temps à réparer et je suis vaguement curieux de la cause sous-jacente. Quelqu'un pourrait-il faire la lumière sur l'anomalie que je vois en utilisant la fonction array_filter
au lieu d'une simple boucle.Pourquoi la sortie rendue par json de array_filter est-elle différente de celle de foreach?
j'aurais pensé les deux blocs de code suivant le même résultat:
// original 'buggy' version
$obj_to->ExtendedProperties[] = array_filter($extendedProperties, function($item){
return isset($item);
});
// later, working version
foreach ($extendedProperties as $prop) {
if (isset($prop)) $obj_to->ExtendedProperties[] = $prop;
}
Cependant, l'API auquel j'étais alors d'envoyer les résultats ne considéraient pas leur équivalent de sortie et a renvoyé une erreur 400. J'ai inclus des échantillons des différentes sorties de JSON. Dans un cas, nous voyons un indice de tableau dans le json imprimé et dans l'autre, nous ne le faisons pas.
// 'good' json
"ExtendedProperties": [
{
"Name": "MaterialCode",
"Value": "5450790E0LD048P8"
},
...
par opposition à
// 'bad' json
"ExtendedProperties": {
"0": {
"Name": "PreferredDate",
"Value": "2016-06-01"
},
...
Merci. J'ai supposé à tort qu'il fonctionnerait comme la méthode filter() de javascript. On dirait que c'était une autre situation où la lecture de la documentation aurait aidé. – trevorgk