php - PHP检查数组键是否连续的平滑方法
问题描述
我需要检查一个数组的键。如果它们是连续的,那很好,如果不是我需要填写一些数据。
例如
Array
(
[0] => 0
[1] => 1
[2] => 8
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[10] => 0
[11] => 0
[12] => 0
[14] => 0
[15] => 0
)
在这种情况下,缺少索引9和13 。为了使示例更简单,我只想用数字999填充缺失的数据。
但是,我的解决方案有点草率并且无法正常工作:
$oldK = 0;
foreach($array as $k=>$entry)
{
if($oldK !== $k)
{
$array[$oldK] = 999;
}
$oldK ++;
}
产生以下输出:
Array
(
[0] => 0
[1] => 1
[2] => 8
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 999
[10] => 999
[11] => 999
[12] => 999
[13] => 999
[14] => 0
[15] => 0
)
有没有一种顺畅的方法?
解决方案
您可以array_replace
结合使用array_fill
:
$keys = array_keys($a);
$result = array_replace(array_fill(0, max($keys), 999), $a);
首先通过抓取键array_keys
应该使其适用于任意数量的元素(显然,如果键是数字的)。
推荐阅读
- android - 无论如何要为Android中的来电和去电制作我的自定义用户界面吗?
- gradle - 为什么 Gradle 构建我的 Java 项目,而我只是将其称为 SonarQube 分析?
- jenkins - 没有这样的 DLS 方法“样式”(MarkupBuilder)
- android - java.lang.RuntimeException:无法启动活动 ComponentInfo:原因:java.lang.NullPointerException
- angularjs - AngularJS 1.5 websocket库安装问题
- r - 提取与向量中的索引最近的相邻索引
- android - 在 Vertical ViewPager 中实现 ViewPager
- reactjs - redux Action 调用其他动作失败
- vb.net - 使用 vb.net 2015 和 oracle 11g 生成自动编号计数器 0001
- c# - 如何让一个窗口在 .Net 中始终保持在顶部?(任务视图)