【问题标题】:PHP - Convert multidimensional associative array's key strings into numbersPHP - 将多维关联数组键字符串转换为数字
【发布时间】:2012-06-10 19:13:53
【问题描述】:

我有一个这样的多维关联数组:

$type = Array(
  [unit-1] = Array(
    [taxon-1] = Array(
      [0] = Array(
        [a] = 1,
        [b] = 1,
        [c] = 'string1'
      ),
      [1] = Array(
        [a] = 1,
        [b] = 1,
        [c] = 'string2'
      ),
    ),
    [taxon-2] = Array(
      [0] = Array(
        [a] = 1,
        [b] = 2,
        [c] = 'string3'
      ),
      [1] = Array(
        [a] = 1,
        [b] = 2,
        [c] = 'string4'
      ),
    ),
  [unit-2] = Array(
    [taxon-1] = Array(
      [0] = Array(
        [a] = 2,
        [b] = 1,
        [c] = 'string5'
      ),
      [1] = Array(
        [a] = 2,
        [b] = 1,
        [c] = 'string6'
      ),
    ),
    [taxon-2] = Array(
      [0] = Array(
        [a] = 2,
        [b] = 2,
        [c] = 'string7'
      ),
      [1] = Array(
        [a] = 2,
        [b] = 2,
        [c] = 'string8'
      ),
    ),
  )

如何将所有关联键(unit-1、unit-2... 和 taxon-1、taxon-2...)转换为序数(0, 1... 和 0, 1... )。我是否需要使用 foreach 循环,如果需要,它会如何进行?

请注意,数组中的单位和分类单元的数量不是有限的。

【问题讨论】:

    标签: php multidimensional-array associative-array key-value


    【解决方案1】:

    如果肯定有两个层次:

    $type = array_values(array_map('array_values', $type));
    

    重新索引数组中的所有数组键:

    function array_reindex($array) {
        if(is_array($array)) {
            return array_map('array_reindex', array_values($array));
        } else {
            return $array;
        }
    }
    

    尚未测试,但应该可以。

    【讨论】:

    • 太棒了。这就像一个魅力。非常感谢。是的,现在我只需要两个级别。只是想知道,如果有更多关卡会复杂多少?
    • 用递归重新索引数组的函数更新了我的答案。
    【解决方案2】:

    您可以为此使用array_values

    【讨论】:

    • 确实可以,而且可以完美运行,但仅适用于第一级键,即 unit-1、unit-2... 分类键不会更改。如何利用 array_values 递归地更深地应用到数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多