下面的数组应该有一个子数组,每个“点”值从1到7,但缺少2,4和6。如何为每个缺失值插入一个数组,其值为“NULL”?
我尝试了一个for($i = 1; $i <= 7; $i++)
并在我的数组内部foreach'ing以查看是否'point' == $i
但是这不起作用。
这已经在一个相当大的数组的嵌套foreach中,所以性能有点重要。
到目前为止代码(不完整且显然不起作用)
foreach($measurements as $measurement_id => $set)
{
for($i = 1; $i <= 7; $i++)
{
foreach($set as $key => $value)
{
$fill = array('value' => null);
if($value['point'] == $i)
$output[$measurement_id][$key] = $value;
else
$output[$measurement_id][$key] = $fill;
}
}
}
数组:
[0] => Array
(
[point] => 1
[value] => 1.0
)
[1] => Array
(
[point] => 3
[value] => 2.0
)
[2] => Array
(
[point] => 5
[value] => 3.0
)
[3] => Array
(
[point] => 7
[value] => 4.0
)
结果应为
[0] => Array
(
[point] => 1
[value] => 1.0
)
[1] => Array
(
[point] => 2
[value] => NULL
)
[2] => Array
(
[point] => 3
[value] => 2.0
)
[3] => Array
(
[point] => 4
[value] => NULL
)
[4] => Array
(
[point] => 5
[value] => 3.0
)
[5] => Array
(
[point] => 6
[value] => NULL
)
[6] => Array
(
[point] => 7
[value] => 4.0
答案 0 :(得分:0)
试试这个:
$oldArr = [ ..your incomplete array.. ];
$newArr = array();
for ($i = 1; $i < 8; ++$i) {
$new = array(
'point' => $i,
'value' => NULL,
);
foreach($oldArr as $old) {
if ($old['point'] == $i) {
$new['value'] = $old['value'];
}
}
$newArr[] = $new;
}
现在$newArr
应该包含您想要的所有值。
答案 1 :(得分:0)
如果您的原始数组按照示例中的point
排序,则只能在一个循环中执行:
$result = array();
for ($i = 1; $i <= 7; $i++)
{
// get the first element of your set
$current = reset($set);
if ($current['point'] === $i)
{
// remove the first element of your set and assign it to the result array
$result[$i - 1] = array_shift($set);
}
else
{
// create a new, empty entry
$result[$i - 1] = array('point' => 1, 'value' => NULL);
}
}
请注意,我正在创建一个新数组并从原始数组中删除值。如果你真的担心资源/性能,你可以使用相同的原理并向后循环(从7到1),将数组的最后一个元素移动到正确的位置并以相同的方式填充空格。