用另一个数组填充数组中的空白索引值

时间:2019-05-06 08:59:50

标签: php arrays

我的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
        )
)

任何帮助将不胜感激。谢谢

5 个答案:

答案 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"
}

https://3v4l.org/iZm32