我们说我有一个类似的数组:
$array = [
'value1',
71,
'stringKey' => 'value2',
3 => 'value3',
4 => 'value4',
64 => 'value5',
'value6',
];
我想循环访问条目并根据条目是否有密钥"手动设置"来执行不同的操作。 (例如,64 => 'value5'
),或者它只是一个带有"顺序"的值。密钥(例如'value1'
- 实际上是0 => 'value1'
)。
foreach ($array as $key => $value) {
if (/* $key has not been "manually set" (i.e., is "sequential") */) {
$result[$value] = 'default';
} else {
$result[$key] = $value;
}
}
所以我得到的数组将是:
[
'value1' => 'default',
71 => 'default',
'stringKey' => 'value2',
3 => 'value3',
4 => 'value4',
64 => 'value5',
'value6' => 'default',
]
我一直在尝试array_keys()
,检查是否is_numeric($key)
,但没有任何内容适用于上述所有条目。
我开始认为这实际上是不可能的......
答案 0 :(得分:0)
你可以这样做:
$i = 0;
foreach($array as $key => $value) {
if ($key == $i) {
$result[$value] = 'default';
} else {
$result[$key] = $value;
}
if (is_integer($key) && $key >= $i) $i = (int)$key + 1;
}
但是,它会使4 => 'value4'
与您指定的内容区别对待,因为如果您只放置'value4'
,则输入数组完全相同。无法从数组中确定您是否已明确提及密钥4或省略了密钥。
因此,上述代码以与处理最后一个键/值对相同的方式处理此键/值对。
输出结果为:
array (
'value1' => 'default',
71 => 'default',
'stringKey' => 'value2',
3 => 'value3',
'value4' => 'default',
64 => 'value5',
'value6' => 'default',
)