Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用另一个数组填充数组中的空白索引值_Php_Arrays - Fatal编程技术网

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

Php 用另一个数组填充数组中的空白索引值,php,arrays,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] =>

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

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

我认为解决这个问题的最好方法是使用for循环和key_

$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++;}
    }
}

您所需要做的就是循环第一个数组,检查每个值是否包含空值,如果包含空值,则取第二个数组的第一个元素,删除其第一项并将其插入空值所在的位置

<?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);

您可以映射数组,找到空值,然后将第一个值从过滤器数组移到该位置。这假设筛选器中的元素数至少与主数组中缺少/为空的元素数相同

$array=array\u映射函数$v使用$filter{ 如果为空$v{ $v=数组\移位$filter; } 返回$v; },$array; 现场演示
您可以通过移动两个以上的数组来实现

$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);

工作。

实际上,您只需要一个简单的一行程序。 这可能不是最有效的解决方案,但这只是一条线;-

第一个数组_与空值相交,并从相交中获取键。 使用键并将其与arr2组合。 这将为您提供:

$result = array_replace($arr1,array_combine(array_keys(array_intersect($arr1, [null])), $arr2));
var_dump($result);
现在将其替换为$arr1,您就得到了最终结果

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"
}
输出:


你至少可以试一下吗?请去看看。我们希望你向我们展示你已经尝试过的东西。这不是一个网站,你只需放弃你的要求,有人会为你做。这已经在StackOverflow中回答了多次,所以搜索这个问题会对你有所帮助。这就是你要找的。您可以在PHP页面或stackoverflow上看到示例/用法*如果需要,线程中的示例甚至有递归数组。感谢您将尝试此方法。此方法非常有效。再次感谢Hanks,非常抱歉,此时noob在更改空部分时遇到错误。您正在执行其他操作。。空$v检查空值,也检查空值。简单的一行,他说:D@ManuelMannhardt好啊打字简单,不需要一年内阅读和调试;-这样更好吗?
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"
}