【问题标题】:How to re-index all subarray elements of a multidimensional array?如何重新索引多维数组的所有子数组元素?
【发布时间】:2012-05-16 14:18:07
【问题描述】:

问题是如何重置密钥,例如对于数组:

Array ( 
    [1_Name] => Array ( 
        [1] => leo 
        [4] => NULL 
    ) 
    [1_Phone] => Array ( 
        [1] => 12345 
        [4] => 434324
    )  
)

重置为:

Array ( 
    [1_Name] => Array ( 
        [0] => leo 
        [1] => NULL 
    ) 
    [1_Phone] => Array ( 
        [0] => 12345 
        [1] => 434324
    ) 
)

【问题讨论】:

标签: php multidimensional-array reindex


【解决方案1】:

重置数组中所有数组的键:

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

如果您只想重置第一级数组键,请使用 array_values() 而不使用 array_map

【讨论】:

  • 由于某种原因没有重置我的数组的键,只能使用 array_values 函数。
  • @SSH 您是否在 数组数组 上使用了它,正如这里所说的那样?
  • 不,这是问题所在,我认为这应该是“重置数组元素的键”,它没有。
  • 你不需要使用array_map:$ret = array_values($ret);足以重置数字键
  • 我不知道是否记录了使用 array_values 重置值,但应该记录。这确实有助于减少我写的行数:)
【解决方案2】:
$array[9] = 'Apple';
$array[12] = 'Orange';
$array[5] = 'Peach';

$array = array_values($array);

通过这个函数你可以重置你的数组

$array[0] = 'Apple';
$array[1] = 'Orange';
$array[2] = 'Peach';

【讨论】:

    【解决方案3】:

    使用array_values 重置密钥

    foreach($input as &$val) {
       $val = array_values($val);
    }
    

    http://php.net/array_values

    【讨论】:

      【解决方案4】:

      在这里您可以看到deceze 提供的方式与简单的array_values 方式之间的区别:

      数组:

      $array['a'][0] = array('x' => 1, 'y' => 2, 'z' => 3);
      $array['a'][5] = array('x' => 4, 'y' => 5, 'z' => 6);
      
      $array['b'][1] = array('x' => 7, 'y' => 8, 'z' => 9);
      $array['b'][7] = array('x' => 10, 'y' => 11, 'z' => 12);
      

      deceze 方式,这是您的输出:

      $array = array_map('array_values', $array);
      print_r($array);
      
      /* Output */
      
      Array
      (
          [a] => Array
              (
                  [0] => Array
                      (
                          [x] => 1
                          [y] => 2
                          [z] => 3
                      )
                  [1] => Array
                      (
                          [x] => 4
                          [y] => 5
                          [z] => 6
                      )
              )
          [b] => Array
              (
                  [0] => Array
                      (
                          [x] => 7
                          [y] => 8
                          [z] => 9
                      )
      
                  [1] => Array
                      (
                          [x] => 10
                          [y] => 11
                          [z] => 12
                      )
              )
      )
      

      如果你只使用array_values 函数,这是你的输出:

      $array = array_values($array);
      print_r($array);
      
      /* Output */
      
      Array
      (
          [0] => Array
              (
                  [0] => Array
                      (
                          [x] => 1
                          [y] => 2
                          [z] => 3
                      )
                  [5] => Array
                      (
                          [x] => 4
                          [y] => 5
                          [z] => 6
                      )
              )
          [1] => Array
              (
                  [1] => Array
                      (
                          [x] => 7
                          [y] => 8
                          [z] => 9
                      )
                  [7] => Array
                      (
                          [x] => 10
                          [y] => 11
                          [z] => 12
                      )
              )
      )
      

      【讨论】:

        【解决方案5】:
        $result = ['5' => 'cherry', '7' => 'apple'];
        array_multisort($result, SORT_ASC);
        print_r($result);
        

        数组([0] => 苹果 [1] => 樱桃)

        //...
        array_multisort($result, SORT_DESC);
        //...
        

        数组([0] => 樱桃 [1] => 苹果)

        【讨论】:

          【解决方案6】:

          为此存在 PHP 原生函数。见http://php.net/manual/en/function.reset.php

          只需这样做:mixed reset ( array &$array )

          【讨论】:

          • 请务必阅读您链接到的手册; reset 做别的事情。
          • 它只是将指针移动到数组的第一个元素。在默认状态 0、1、2...N 中删除键的 Topicstarter 搜索方式。
          猜你喜欢
          • 2012-01-23
          • 1970-01-01
          • 2021-02-05
          • 2012-12-16
          • 2011-10-13
          • 2011-07-10
          • 1970-01-01
          • 2019-06-28
          相关资源
          最近更新 更多