更改PHP中嵌套数组的第n级键索引格式

huangapple go评论89阅读模式
英文:

Change key indexing format for nth level of nested array in php

问题

  1. [
  2. "NOCPL-All -working" => [
  3. "name" => "NOCPL-All -working",
  4. "item" => [
  5. "0" => [
  6. "name" => "apis for web",
  7. "item" => [
  8. "0" => [
  9. "name" => "update user branch maps"
  10. ],
  11. "1" => [
  12. "name" => "add user branch maps"
  13. ]
  14. ]
  15. ],
  16. "1" => [
  17. "name" => "update user web",
  18. "item" => [
  19. "0" => [
  20. "name" => "update user"
  21. ]
  22. ]
  23. ]
  24. ]
  25. ]
  26. ];
英文:

I have nth level of nested array with string naming key , I want to convert that in indexing key only for array of item key.
i tried it to convert but that conversation only possible for limited level of nested array rather than nth level .

Input array:

  1. $input_array= [
  2. "NOCPL-All -working" => [
  3. "name" => "NOCPL-All -working",
  4. "item" => [
  5. "apis for web" => [
  6. "name" => "apis for web",
  7. "item" => [
  8. "0" => [
  9. "name" => "update user branch maps"
  10. ]
  11. ]
  12. ],
  13. "update user web" => [
  14. "name" => "update user web",
  15. "item" => [
  16. "0" => [
  17. "name" => "update user"
  18. ],
  19. "1" => [
  20. "name" => "add user"
  21. ]
  22. ]
  23. ]
  24. ]
  25. ]
  26. ];

I tried below code to convert indexing of 'item' nested array for limited level

  1. function cleanArrayKeys($arr) {
  2. foreach($arr as $k=>$arr1) {
  3. if(isset($arr[$k]['item'])) {
  4. $arr[$k]['item'] = array_values($arr[$k]['item']);
  5. foreach($arr[$k]['item'] as $k1=>$arr2) {
  6. if(isset($arr[$k]['item'][$k1]['item'])) {
  7. $arr[$k]['item'][$k1]['item'] = array_values($arr[$k]['item'][$k1]['item']);
  8. foreach($arr[$k]['item'][$k1]['item'] as $k3=>$arr3) {
  9. if(isset($arr[$k]['item'][$k1]['item'][$k3]['item'])) {
  10. $arr[$k]['item'][$k1]['item'][$k3]['item'] = array_values($arr[$k]['item'][$k1]['item'][$k3]['item']);
  11. foreach($arr[$k]['item'][$k1]['item'][$k3]['item'] as $k4=>$arr4) {
  12. if(isset($arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'])) {
  13. $arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'] = array_values($arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item']);
  14. foreach($arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'] as $k5=>$arr5) {
  15. if(isset($arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'][$k5]['item'])) {
  16. $arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'][$k5]['item'] = array_values($arr[$k]['item'][$k1]['item'][$k3]['item'][$k4]['item'][$k5]['item']);
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }
  27. return $arr;
  28. }
  29. print_r(cleanArrayKeys($input_array));
  30. ?>

Expected Output :

  1. [
  2. "NOCPL-All -working" => [
  3. "name" => "NOCPL-All -working",
  4. "item" => [
  5. "0" => [
  6. "name" => "apis for web",
  7. "item" => [
  8. "0" => [
  9. "name" => "update user branch maps"
  10. ],
  11. "1" => [
  12. "name" => "add user branch maps"
  13. ]
  14. ]
  15. ],
  16. "1" => [
  17. "name" => "update user web",
  18. "item" => [
  19. "0" => [
  20. "name" => "update user"
  21. ]
  22. ]
  23. ]
  24. ]
  25. ]
  26. ];

答案1

得分: 1

尝试使用递归:

  1. function aValues(&$arr) {
  2. if (array_key_exists('item', $arr)) {
  3. $arr['item'] = array_values($arr['item']);
  4. }
  5. foreach ($arr['item'] as &$el) {
  6. if (array_key_exists('item', $el)) {
  7. aValues($el);
  8. }
  9. }
  10. }
  11. aValues($input_array);
  12. print_r($input_array);
英文:

Try using a recursion:

  1. function aValues(&$arr) {
  2. if (array_key_exists('item', $arr)) {
  3. $arr['item'] = array_values($arr['item']);
  4. }
  5. foreach ($arr['item'] as &$el) {
  6. if (array_key_exists('item', $el)) {
  7. aValues($el);
  8. }
  9. }
  10. }
  11. aValues($input_array);
  12. print_r($input_array);

huangapple
  • 本文由 发表于 2023年2月16日 13:15:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/75468100.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定