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