在之前的文章《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);
输出结果为:
可以看出,多维数组$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 后的结果(有