【问题标题】:PHP - save an Array if a value are missingPHP - 如果缺少值,则保存一个数组
【发布时间】:2016-08-18 10:38:10
【问题描述】:

我想在一个数组中保存两个数组。 这个例子有效

    $myArray = [];
    $a = [1,2,3,4];
    $b = [1,2,3,4];

输出

Array
(
 [a] => Array
   (
   [0] => 1
   [1] => 2
   [2] => 3
   )
 [b] => Array
   (
   [1] => 11
   [2] => 22
   [3] => 33
 )
)

我的问题是当在一个数组中,一个值丢失然后出现错误

Array
(
 [a] => Array
  (
   [0] => 1
   [1] => 2
   [2] => 3
  )
 [b] => Array
  (
   [1] => 11
   [2] => 
   [3] => 33
  )
)

我需要这样的输出。如果缺少值

Array
(
 [a] => Array
  (
   [0] => 1
   [2] => 3
  )
   [b] => Array
  (
   [1] => 11
   [3] => 33
  )
)

我该怎么做? 谢谢。

【问题讨论】:

  • 第一个数组的值是否引用了第二个数组的键?并且您想检查第二个数组中是否缺少任何值,以及它们是否从第一个数组中删除了该元素以及相关元素?
  • 使用 if(!empty($val)){ }
  • 没错,但是第二个数组可以有一个引用键。
  • 不幸的是,这不适用于 !empty()

标签: php arrays


【解决方案1】:

php 中有一个函数:array_filter,它将从数组中删除所有等于 false (==) 的项目。您可以将此函数调整为递归工作,这样它也会从子数组中删除所有空值。

该方法应如下所示:

function array_filter_recursive($input) 
  { 
    foreach ($input as &$value) 
    { 
      if (is_array($value)) 
      { 
        $value = array_filter_recursive($value); 
      } 
    } 

    return array_filter($input); 
  } 

要获得没有空值的新数组,只需像这样调用:

 $myArray = array_filter_recursive($myArray); //Or pass the array name where you have the data.

【讨论】:

    【解决方案2】:

    试试这个功能...

    function removeBlankElements(array & $firstArray, array & $secondArray)
    {
        // Search for null, '', or false values in $secondArray
        $secondArrayRemovalIndexes = array_unique(array_merge(array_keys($secondArray, null), array_keys($secondArray, ''), array_keys($secondArray, false)));
        $firstArrayRemoveIndexes = [];
        // Build up an array of index in the $firstArray for the blank values found in the $secondArray
        foreach ($secondArrayRemovalIndexes as $secondIndex) {
            $firstIndex = array_search($secondIndex, $firstArray);
            if ($firstIndex !== false) {
                $firstArrayRemoveIndexes[] = $firstIndex;
            }
        }
        // Remove the indexes we have built up.
        $firstArray = array_diff_key($firstArray, array_flip($firstArrayRemoveIndexes));
        $secondArray = array_diff_key($secondArray, array_flip($secondArrayRemovalIndexes));
    }
    

    然后在实践中它看起来像这样:

    // Here's the demo array you have
    $x = [
        'a' => [
            0 => 1,
            1 => 2,
            2 => 3,
        ],
        'b' => [
            1 => 11,
            2 => null,
            3 => 33,
        ],
    ];
    // Run the function passing in our 2 arrays
    removeBlankElements($x['a'], $x['b']);
    

    结果..

    var_dump($x);
    
    array(2) {
        'a' =>
      array(2) {
            [0] =>
        int(1)
        [2] =>
        int(3)
      }
      'b' =>
      array(2) {
            [1] =>
        int(11)
        [3] =>
        int(33)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      相关资源
      最近更新 更多