php - Supprime la clé la plus externe d'un tableau multidimensionnel et conserve la valeur
phpcn_u1582
phpcn_u1582 2017-06-23 09:11:13
0
3
2510

Voici le tableau. Après avoir utilisé array_values, j'ai découvert qu'il semble avoir été réorganisé en fonction des invites ID impolde indiquant que le tableau ne peut pas être utilisé comme paramètre, que l'objet est également utilisé et que le json est également converti. Comment dois-je y aller ?

Mise à jour :

Cela suffit, mais après ma nouvelle retlist 0 array_colum, le résultat imprimé [0] est allé à la fin du tableau.

phpcn_u1582
phpcn_u1582

répondre à tous(3)
代言

Si vous souhaitez convertir JSON en tableau PHP, la méthode est la suivante

Tout d'abord, votre format de données est JSON, qui doit d'abord être converti en tableau PHP.

$a = json_decode($a, TRUE);

json_decode第二个参数为TRUE signifie conserver les noms de clés, sinon une fois le JSON converti en tableau PHP, les noms de clés du tableau PHP seront réorganisés.

Puis $a['data']值用array_column处理,或者使用array_values dans vos données et réorganisez les valeurs du tableau.

$a['Data'] = array_column($a['Data'], NULL);
// 或者
$a['Data'] = array_values($a['Data']);

Si vous souhaitez convertir PHP en JSON, utilisez DataData为数组[].

Tant que dans le tableau PHP, suivez d'abord ce qui précède array_column或者array_values处理过$a['Data'], puis exécutez directement

$a = json_encode($a);

Attentionjson_encode第二个参数绝对不能用JSON_FORCE_OBJECT,否则还是会使Data变为对象{}.

Mise à jour

Après avoir lu votre code, il me semble savoir ce que vous voulez faire. Vous voulez connaître la valeur ID dans le tableau d'origine et $makeupId相等的项,然后把它提前到数组第一个?如果是这样你的代码写复杂了。通过array_column()Cette fonction magique peut facilement répondre à vos besoins. Le code est le suivant

$newarr = [];
$ret = array_column($ret, NULL, 'ID');

# 上面这行代码做了一个神奇的事情,就是将源代码的顺序保持不变,然后将ID作为了键值,
# 生成了一个关联数组。
#
# 下面简单讲一下array_column的神奇之处,它可以将像你这种数据格式的
# 二维数组(矩阵型二维数组)中的某一列拆出来,作为键值,另外一列拆出来作为键名,
# 形成关联数组。
#
# 当然,这个函数的定义array_column($source, $value_field[, $key_field]);
# 其中,
#     $source为源数组,
#     $value_field为需要提取作为键值的名字,如果为NULL则将整个内层数组作为值
#         (也就是保持原来的值不变,这个一般用于数组键名的重新生成)
#     $key_field为需要提取作为键名的名字,此处为'ID',如果为NULL或者省略,
#         则会重新从0开始编号(配合上面$value_field为NULL可以重新排序数组)
#
# 然后给个简单说明:
# $a = [
#     't' => ['id' => 1, 'name' => 'a'],
#     'u' => ['id' => 2, 'name' => 'b']
# ];
#
# 通过array_column($a, NULL)得到的是
# $a = [
#     ['id' => 1, 'name' => 'a'],
#     ['id' => 2, 'name' => 'b']
# ];
#
# 通过array_column($a, 'id')得到的是
# $a = [1, 2];
#
# 通过array_column($a, NULL, 'id')得到的是
# $a = [
#     1 => ['id' => 1, 'name' => 'a'],
#     2 => ['id' => 2, 'name' => 'b']
# ];
#
# 通过array_column($a, 'name', 'id')得到的是
# $a = [
#     1 => 'a'
#     2 => 'b'
# ];

# 说了这么多你应该理解了这个函数的用法,上面那句
# $ret = array_column($ret, NULL, 'ID')将$ret变成了关联数组,
# 这样$ret[$makeupId]就可以直接找到你需要提取的项了,是不是很方便?
#
# 下面接着给代码

if(!empty($ret[$makeupId])) {
    $newarr = $ret[$makeupId]; // 取出新对象
    unset($ret[$makeupId]); // 删除原有数组中的对象
}

$ret = array_column($ret, NULL);
# 上面这行将关联数组再转回了顺序数组,但是别忘了,
# 因为满足$makeupId的项被取到了$newarr,然后原数组中的$makeupId项被删掉,
# 所以转回来的数组是不含满足$makeupId的项的。

# 接下来,将$newarr推到数组之前,
# 此处注意,array_unshift()方法直接操作原数组,所以不需要赋值
array_unshift($ret, $newarr);

Fin du code


Ensuite, laissez-moi en reparler, pourquoi vous utilisez array_values()array_column()都会使顺序变乱。因为这两个函数都是会重新编号的,而且它编号的顺序,不是你键名的标签顺序,也就是说你键名手动写成0,1,2,3并不会使它重新编号时候按照0,1,2,3 pour trier. L'ordre dans lequel il est renuméroté dépend de l'ordre dans lequel votre code est exécuté. En d'autres termes, votre dernier...[0] = $newarr n'est pas réellement au début du tableau, mais à la fin du tableau entier, il a juste un nom de clé de 0, donc peu importe vos efforts. , ce 0 correspond à Les éléments courront tous jusqu'au bout.


Mise à jour 2

Il y a de nombreux commentaires et explications dans le code ci-dessus, voici le code pur :

$newarr = [];
$ret = array_column($ret, NULL, 'ID');

if(!empty($ret[$makeupId])) {
    $newarr = $ret[$makeupId]; // 取出新对象
    unset($ret[$makeupId]); // 删除原有数组中的对象
}

$ret = array_column($ret, NULL);
array_unshift($ret, $newarr);

var_dump($ret);

Mise à jour 3

Ajoutons un peu plus de contenu. Vous trouverez ci-dessous plusieurs solutions réalisables en plus array_column.

Option 1 :

Cette solution est basée sur la modification de votre code d'origine.
Ajoutez $retlist = ... à l'avant-dernière ligne de votre code (ci-dessus

)
ksort($ret_list, SORT_NUMERIC);

Option 2 :

Cette solution est également basée sur la modification de votre code d'origine.
Changez $retlist[0] = $newarr;改为array_unshift($retlist, $newarr);

dans votre code

Comme mentionné ci-dessus, array_columnarray_values都会重新编号,重新编号的顺序取决于你定义对应值的顺序,而并非是键名的数字顺序,所以上面这个修改,是用数组头部推入项替代$retlist[0] et array_values seront renumérotés. L'ordre de renumérotation dépend de l'ordre dans lequel vous définissez les valeurs correspondantes, et non de l'ordre numérique des noms de clés, donc la modification ci-dessus est. pour utiliser des tableaux, les éléments push d'en-tête remplacent la définition de la valeur et l'initialisation de $retlist[0].

Option 3 :

Ceci est également modifié en fonction de votre code.
Avant de parcourir, définissez d'abord $retlist[0] = [],然后当你遍历到符合$makeupId项的时候,直接赋值给$retlist[0],这样,由于事先定义了$retlist[0], ainsi même s'il est renuméroté, son ordre sera toujours le premier.

滿天的星座

Cela signifie-t-il que le simple fait de supprimer la valeur clé équivaut à supprimer une couche du tableau multidimensionnel ? Si c'est le cas, j'ai écrit un exemple approximatif. Vous pouvez suivre cette idée pour la mettre en œuvre, comme le montre l'image ci-dessus

.
学霸

Il est préférable de convertir les données json en un tableau php pour un traitement plus facile. Sinon, ce sera difficile à gérer.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal