我的PHP中有数组,例如:
Array
(
[0] => Array
(
[0] => Data 1 table 1
[1] =>
[2] => Data 3 table 1
[3] =>
[4] =>
[5] => Data 6 table 1
[6] =>
[7] => Data 8 table 1
[8] =>
[9] => Data 10 table 1
)
)
,我需要用数组或$variable
中的新值填充空元素。也许例如,我从另一个数组获取数据:
Array
(
[0] => Array
(
[0] => Data 1 table 2
[1] => Data 2 table 2
[2] => Data 3 table 2
[3] => Data 4 table 2
[4] => Data 5 table 2
)
)
所以我可以得到结果
Array
(
[0] => Array
(
[0] => Data 1 table 1
[1] => Data 1 table 2
[2] => Data 3 table 1
[3] => Data 2 table 2
[4] => Data 3 table 2
[5] => Data 6 table 1
[6] => Data 4 table 2
[7] => Data 8 table 1
[8] => Data 5 table 2
[9] => Data 10 table 1
)
)
任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
您需要做的就是遍历第一个数组,检查每个值是否包含空值,如果是,则取第二个数组的第一个元素,删除其第一项并将其插入到空值中是。
<?php
$arr1 = [
0 => 'Data 1 Table 1',
1 => null,
2 => 'Data 2 Table 1',
3 => null,
4 => null,
5 => 'Data 3 Table 1',
];
$arr2 = [
0 => 'Data 1 Table 2',
1 => 'Data 2 Table 2',
2 => 'Data 3 Table 2',
];
foreach ($arr1 as $index => $value) {
if (is_null($value)) {
$arr1[$index] = array_shift($arr2);
}
}
print_r($arr1);
答案 1 :(得分:0)
我认为解决此问题的最佳方法是使用for循环和key_exists
$counter = 0;
end($array);
$lastIndex = key($array); //has to be int val
for ($i = 0; $i < $lastIndex; $i++) {
if (!key_exists($i, $array)) {
if (key_exists($counter, $array2)) {
$array[$i] = $array2[$counter];
$counter++;}
}
}
答案 2 :(得分:0)
您可以映射到数组,找到空值,然后将第一个值从过滤器数组移到该位置。假设您的过滤器中元素的数量至少与主数组中缺失/空的元素数量相同。
$array = array_map(function($v) use ($filter) {
if (empty($v)) {
$v = array_shift($filter);
}
return $v;
}, $array);
答案 3 :(得分:0)
您可以通过在两个数组上移动
$arr = array_shift($arr); // shifting to first index
$arr1 = array_shift($arr1);
$temp = array_filter($arr, function ($var) { // fetching empty values
return empty($var);
});
$arr = array_filter($arr); // now getting not empty values
$result = $arr + array_combine(array_keys($temp), $arr1); // adding array to maintain index
ksort($result); // sorting by key
echo "<pre>";
print_r($result);
工作demo。
答案 4 :(得分:0)
您实际上只需要一个简单的衬纸。
这可能不是最有效的解决方案,但这只是一行;-)
首先array_intersect空值并从相交处获取键。
使用这些键并将它们与arr2结合使用。
这会给你:
$arr2 = [
1 => 'Data 1 Table 2',
3 => 'Data 2 Table 2',
4 => 'Data 3 Table 2',
];
现在将其替换为$ arr1,您将得到最终结果。
$result = array_replace($arr1,array_combine(array_keys(array_intersect($arr1, [null])), $arr2));
var_dump($result);
输出:
array(6) {
[0]=>
string(14) "Data 1 Table 1"
[1]=>
string(14) "Data 1 Table 2"
[2]=>
string(14) "Data 2 Table 1"
[3]=>
string(14) "Data 2 Table 2"
[4]=>
string(14) "Data 3 Table 2"
[5]=>
string(14) "Data 3 Table 1"
}