【问题标题】:Filling blank index value in array with another array [closed]用另一个数组填充数组中的空白索引值[关闭]
【发布时间】:2019-09-23 21:27:47
【问题描述】:

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

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

【问题讨论】:

  • 你至少可以尝试一下吗
  • 请阅读How to Ask。我们希望您向我们展示您已经尝试过的内容。这不是一个您只需放弃您的要求就有人会为您完成的网站。
  • 这已在 StackOverflow 中得到多次回答,因此搜索此事会对您有所帮助。 array_merge 是你要找的。您可以在 PHP 页面上查看示例/用法,或在 stackoverflow 上查看 here is a thread with the examples*。 *如果需要,线程中的示例甚至还有递归数组。

标签: php arrays


【解决方案1】:

我认为解决这个问题的最佳方法是使用 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】:

    你需要做的就是遍历第一个数组,检查每个值是否包含空值,如果是,则取出第二个数组的第一个元素,删除它的第一项并将其插入到空值的位置是。

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

    【讨论】:

    • 谢谢你试试这个
    • 这很好用,再次感谢
    【解决方案3】:

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

    $array = array_map(function($v) use ($filter) {
        if (empty($v)) {
            $v = array_shift($filter);
        }
        return $v;
    }, $array);
    

    【讨论】:

    • 谢谢,很抱歉这个菜鸟
    • 更改空部分时遇到错误
    • 那你在做别的事情。empty($v) 检查空值,空值。
    【解决方案4】:

    你可以通过移动两个数组来做到这一点

    $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

    【讨论】:

      【解决方案5】:

      您实际上只需要一个简单的衬里。
      这可能不是最有效的解决方案,但它是一行 ;-)

      首先 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

      【讨论】:

      • “简单的单线”他说:D
      • @ManuelMannhardt 好的...输入简单,一年内无需阅读和调试 ;-) 是不是更好?
      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2013-03-16
      相关资源
      最近更新 更多