站长资讯网
最全最丰富的资讯网站

PHP数组学习之怎么重置多维数组的索引

在之前的文章《PHP数组学习之怎么去除空白或者重复的元素》中,我们介绍了数组去空去重,即删除数组中的空元素和重复元素的方法,随便简单聊了聊重置一维数组索引的方法。一维数组的索引可以重置,那么二维数组,乃至多维数组的索引要怎么重置?下面我们来介绍一下方法。

首先从上文我们知道,一维数组想要重置索引,非常简单,直接利用array_values($array)函数就行。

array_values()函数的作用是返回数组中所有元素的值,使用起来非常简单,只有一个必选参数$array,就可以返回一个包含给定数组中所有值的数组,但不保留键名。被返回的数组将使用索引数组的形式,数组的索引从 0 开始且以 1 递增。

我们可以利用array_values()函数将元素下标混乱的数组重新理顺,即索引从 0 开始且以 1 递增;该函数不仅可以用于索引数组,也可用于关联数组,能将关联数组转化为索引数组。

而重置多维数组的索引,也需要利用到这个array_values()函数。下面我们直接给出实现方法:

function reform_keys($array){     if(!is_array($array)){         return $array;     }     $keys = implode('', array_keys($array));     if(is_numeric($keys)){         $array = array_values($array);     }     $array = array_map('reform_keys', $array);     return $array; };

测试一下,有下面一个多维数组

$post = [     0 => [         'title' => 'xxx联票',         'price' => 368.00,         'items' => [             '33' => [                 'scenic_id' => 33,                 'products' => [                     'goods_id' => 13                 ]             ],             '1500' => [                 'scenic_id' => 1500,                 'products' => [                     'goods_id' => 57                 ]             ],         ],         'tickets' => 9     ],     10 => [         'title' => 'zzz联票',         'price' => 500.00,         'items' => [             '157' => [                 'scenic_id' => 157,                 'products' => [                     'goods_id' => 77                 ],                 'attr' => [                     '50' => [                         'item' => '午场'                     ],                     '55' => [                         'item' => '可退'                     ]                 ]             ],             '19' => [                 'scenic_id' => 19,                 'products' => [                     'goods_id' => 87                 ]             ]         ],         'tickets' => 3     ], ];

调用reform_keys()函数重置$post数组的索引,并输出重置后的数组:

$list = reform_keys($post); var_dump($list);

输出结果为:

PHP数组学习之怎么重置多维数组的索引

可以看出,多维数组$post里面所有层级的索引都被重置,从0开始计数了!

下面给大家介绍一下里面用的函数:

  • array_keys($array):获取$array数组中所有键名;

  • $keys=implode('', array_keys($array)):将键名数组中的元素拼接在一起,返回一个字符串$keys

  • is_numeric($keys):检测变量$keys是否为数字或数字字符串。

  • array_values($array):获取全部数值,即重置索引;

  • array_map('reform_keys', $array):为$array数组的每个元素应用回调函数reform_keys()。

    array_map() 返回一个 array,数组内容为 array1 的元素按索引顺序为参数调用 callback 后的结果(有

赞(0)
分享到: 更多 (0)