PHP-递归索引嵌套数组 [英] PHP - Reindexing nested array recursively

查看:61
本文介绍了PHP-递归索引嵌套数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编写此递归函数以重新索引数组(请参见下图-我使用的JSON化数组,以便更好地查看它)

Wrote this recursive function to reindex an array (see image below - JSONized Array I work with, to better see it)

代码:

 private function reindex($array)
 {
        foreach ($array as $key => $value) {

            if (is_array($value)) {

                $array[$key]=$this->reindex($value);

            }

            array_values($array);



        }

        return $array;


 }

目标是为它重新编制索引索引中没有跳转,即

The goal is to reindex it so there are no jump in indexes i.e

$ arr ['body'] [0] ['1'] ['body']在索引2、4和6处都有元素,希望将其重新索引为0、1、2

$arr['body'][0]['1']['body'] has elements at indexes 2, 4 and 6, would like to reindex it to be 0, 1, 2

也应适用于其他数组(n个嵌套数组)。应该是一般功能。

Should work for different arrays also (n amount of nested arrays). Should be general function.

我该怎么做?

谢谢

更新1:

Var_dump输出:

Var_dump output:

array(4) {
  ["token_name"]=>
  string(6) "C_ROOT"
  ["token_group"]=>
  string(7) "C_BLOCK"
  ["group"]=>
  bool(true)
  ["body"]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      array(7) {
        ["token_name_org"]=>
        string(8) "T_SWITCH"
        ["token"]=>
        int(339)
        ["value"]=>
        string(6) "switch"
        ["line"]=>
        int(2)
        ["token_group"]=>
        string(9) "FUNCTIONS"
        ["token_name"]=>
        string(8) "C_SWITCH"
        ["args"]=>
        array(1) {
          [0]=>
          array(1) {
            [0]=>
            array(7) {
              ["token_name_org"]=>
              string(10) "T_VARIABLE"
              ["token"]=>
              int(320)
              ["value"]=>
              string(4) "argv"
              ["line"]=>
              int(2)
              ["token_group"]=>
              string(9) "VARIABLES"
              ["token_name"]=>
              string(10) "C_VARIABLE"
              ["args"]=>
              array(1) {
                [0]=>
                array(1) {
                  [0]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(9) "T_LNUMBER"
                    ["token"]=>
                    int(317)
                    ["value"]=>
                    string(1) "1"
                    ["line"]=>
                    int(2)
                    ["token_group"]=>
                    string(9) "VARIABLES"
                    ["token_name"]=>
                    string(8) "C_NUMBER"
                  }
                }
              }
            }
          }
        }
      }
      [1]=>
      array(4) {
        ["token_name"]=>
        string(7) "C_BLOCK"
        ["token_group"]=>
        string(7) "C_BLOCK"
        ["group"]=>
        bool(true)
        ["body"]=>
        array(4) {
          [0]=>
          array(1) {
            [0]=>
            array(4) {
              ["token_name"]=>
              string(12) "C_CASE_BLOCK"
              ["token_group"]=>
              string(12) "C_CASE_BLOCK"
              ["group"]=>
              bool(true)
              ["args"]=>
              array(1) {
                [0]=>
                array(6) {
                  ["token_name_org"]=>
                  string(9) "T_LNUMBER"
                  ["token"]=>
                  int(317)
                  ["value"]=>
                  string(2) "10"
                  ["line"]=>
                  int(4)
                  ["token_group"]=>
                  string(9) "VARIABLES"
                  ["token_name"]=>
                  string(8) "C_NUMBER"
                }
              }
            }
          }
          [2]=>
          array(1) {
            [0]=>
            array(5) {
              ["token_name"]=>
              string(12) "C_CASE_BLOCK"
              ["token_group"]=>
              string(12) "C_CASE_BLOCK"
              ["group"]=>
              bool(true)
              ["args"]=>
              array(1) {
                [0]=>
                array(6) {
                  ["token_name_org"]=>
                  string(26) "T_CONSTANT_ENCAPSED_STRING"
                  ["token"]=>
                  int(323)
                  ["value"]=>
                  string(13) "single_quoted"
                  ["line"]=>
                  int(7)
                  ["token_group"]=>
                  string(7) "STRINGS"
                  ["token_name"]=>
                  string(8) "C_STRING"
                }
              }
              ["body"]=>
              array(1) {
                [0]=>
                array(5) {
                  [0]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(10) "T_VARIABLE"
                    ["token"]=>
                    int(320)
                    ["value"]=>
                    string(3) "val"
                    ["line"]=>
                    int(8)
                    ["token_group"]=>
                    string(9) "VARIABLES"
                    ["token_name"]=>
                    string(10) "C_VARIABLE"
                  }
                  [1]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(18) "C_ASSIGNMENT_EQUAL"
                    ["line"]=>
                    int(8)
                    ["value"]=>
                    string(1) "="
                    ["token"]=>
                    string(5) "VALUE"
                    ["token_group"]=>
                    string(11) "ASSIGNMENTS"
                    ["token_name"]=>
                    string(18) "C_ASSIGNMENT_EQUAL"
                  }
                  [2]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(9) "T_LNUMBER"
                    ["token"]=>
                    int(317)
                    ["value"]=>
                    string(1) "3"
                    ["line"]=>
                    int(8)
                    ["token_group"]=>
                    string(9) "VARIABLES"
                    ["token_name"]=>
                    string(8) "C_NUMBER"
                  }
                  [3]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(7) "VALUE_-"
                    ["line"]=>
                    int(8)
                    ["value"]=>
                    string(1) "-"
                    ["token"]=>
                    string(5) "VALUE"
                    ["token_group"]=>
                    string(9) "OPERATORS"
                    ["token_name"]=>
                    string(16) "C_OPERATOR_MINUS"
                  }
                  [4]=>
                  array(6) {
                    ["token_name_org"]=>
                    string(9) "T_LNUMBER"
                    ["token"]=>
                    int(317)
                    ["value"]=>
                    string(1) "5"
                    ["line"]=>
                    int(8)
                    ["token_group"]=>
                    string(9) "VARIABLES"
                    ["token_name"]=>
                    string(8) "C_NUMBER"
                  }
                }
              }
            }
          }
          [4]=>
          array(1) {
            [0]=>
            array(5) {
              ["token_name"]=>
              string(12) "C_CASE_BLOCK"
              ["token_group"]=>
              string(12) "C_CASE_BLOCK"
              ["group"]=>
              bool(true)
              ["args"]=>
              array(1) {
                [0]=>
                array(6) {
                  ["token_name_org"]=>
                  string(26) "T_CONSTANT_ENCAPSED_STRING"
                  ["token"]=>
                  int(323)
                  ["value"]=>
                  string(13) "double_quoted"
                  ["line"]=>
                  int(11)
                  ["token_group"]=>
                  string(7) "STRINGS"
                  ["token_name"]=>
                  string(8) "C_STRING"
                }
              }
              ["body"]=>
              array(1) {
                [0]=>
                array(1) {
                  [0]=>
                  array(7) {
                    ["token_name_org"]=>
                    string(6) "T_ECHO"
                    ["token"]=>
                    int(328)
                    ["value"]=>
                    string(4) "echo"
                    ["line"]=>
                    int(13)
                    ["token_group"]=>
                    string(9) "FUNCTIONS"
                    ["token_name"]=>
                    string(6) "C_ECHO"
                    ["args"]=>
                    array(1) {
                      [0]=>
                      array(1) {
                        [0]=>
                        array(6) {
                          ["token_name_org"]=>
                          string(26) "T_CONSTANT_ENCAPSED_STRING"
                          ["token"]=>
                          int(323)
                          ["value"]=>
                          string(13) "double quoted"
                          ["line"]=>
                          int(13)
                          ["token_group"]=>
                          string(7) "STRINGS"
                          ["token_name"]=>
                          string(8) "C_STRING"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          [6]=>
          array(3) {
            [0]=>
            array(4) {
              ["token_name_org"]=>
              string(9) "T_DEFAULT"
              ["token"]=>
              int(342)
              ["value"]=>
              string(7) "default"
              ["line"]=>
              int(18)
            }
            [1]=>
            array(6) {
              ["token_name_org"]=>
              string(17) "C_SEPARATOR_COLON"
              ["line"]=>
              int(18)
              ["value"]=>
              string(1) ":"
              ["token"]=>
              string(5) "VALUE"
              ["token_group"]=>
              string(10) "SEPARATORS"
              ["token_name"]=>
              string(17) "C_SEPARATOR_COLON"
            }
            [2]=>
            array(6) {
              ["token_name_org"]=>
              string(7) "T_BREAK"
              ["token"]=>
              int(343)
              ["value"]=>
              string(5) "break"
              ["line"]=>
              int(19)
              ["token_group"]=>
              string(16) "TODO_BREAK_GROUP"
              ["token_name"]=>
              string(7) "C_BREAK"
            }
          }
        }
      }
    }
  }
}


推荐答案

这里是一种只能重新索引数值的方法:

Here is a method that will only reindex numeric values:

function reindex($array)
{
    $index = 0;
    $return = [];

    foreach ($array as $key => $value) {
        if (is_string($key)) {
            $newKey = $key;
        } else {
            $newKey = $index;
            ++$index;
        }

        $return[$newKey] = is_array($value) ? reindex($value) : $value;
    }

    // Sort alphabetically, numeric first then alpha
    ksort($return, SORT_NATURAL);

    return $return;
}

此处为示例: http://ideone.com/969OGa

这篇关于PHP-递归索引嵌套数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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