合并帖子值并删除空

时间:2016-04-21 20:37:24

标签: php arrays post

我有两组来自$_POST的数组。两者的键都是数字,计数将是相同的,因为它们成对出现的名称和数字:

$_POST[names]
(
    [0] => First
    [1] => Second
    [2] => 
    [3] => Fourth
)

$_POST[numbers]
(
    [0] => 10
    [1] => 
    [2] => 3
    [3] => 3
)

现在我需要将这两者合并,但删除缺少值的每个条目。

结果应该是这样的:

$finalArray
(
    [First] => 10
    [Fourth] => 3
)

动态创建发布数据,因此根据用户输入可能会丢失不同的值。

我尝试过这样的事情:

if (array_key_exists('names', $_POST)) {
        $names = array_filter($_POST['names']);
        $numbers = array_filter($_POST['numbers']);

        if($names and $numbers) {
           $final = array_combine($names, $numbers);

        }

    }

但我似乎无法正确过滤它,因为它给了我一个错误:

  

警告:array_combine():两个参数都应具有相同数量的元素

5 个答案:

答案 0 :(得分:3)

这是一种有趣的方式:

$result = array_flip(array_flip(array_filter(array_combine($_POST['names'],
                                                           $_POST['numbers']))));

答案 1 :(得分:3)

如何使用带有array_filter标记的ARRAY_FILTER_USE_BOTH

<?php
    $array1 = [
        0 => "First",
        1 => "Second",
        2 => "",
        3 => "Fourth",
    ];

    $array2 = [
        0 => 10,
        1 => "",
        2 => 3,
        3 => 3,
    ];

    var_dump(array_filter(array_combine($array1, $array2), function($value, $key) {
        return $key == "" || $value == "" ? false : $value;
    }, ARRAY_FILTER_USE_BOTH ));

/*
Output:

array(2) {
  ["First"]=>
  int(10)
  ["Fourth"]=>
  int(3)
}
*/

答案 2 :(得分:2)

// create array using $_POST['names'] as keys and $_POST['numbers'] as values
$result = array_combine($_POST['names'], $_POST['numbers']);
// remove entries that have empty values
$result = array_filter($result);
// remove entry with empty key
unset($result[null]);

print_r($result);

答案 3 :(得分:1)

如果两个数组的计数相同,并且键始终为数字,则可以执行以下操作:

$total = count($_POST['names']);
$final = array();
for ($i = 0; $i < $total; $i++) {
    if (trim($_POST['names'][$i]) != '' && trim($_POST['numbers'][$i]) != '') {
        $final[$_POST['names'][$i]] = $_POST['numbers'][$i];
    }
}

或者,如果您更喜欢使用foreach而不是for

$final = array();
foreach ($_POST['names'] as $key => $value) {
    if (trim($value) != '' && trim($_POST['numbers'][$key]) != '') {
        $final[$value] = $_POST['numbers'][$key];
    }
}

答案 4 :(得分:0)

考虑您之前的信息:

  

两个键都是数字,计数将是相同的,因为它们成对出现为名称和数字

$myNewArray = array();

$count = 0;
foreach ($_POST['names'] as $bufferArray)
{
  if (($bufferArray[$count]!=NULL)&&($_POST['numbers][$count]!=NULL))
  {
    array_push($myNewArray, array($bufferArray[$count] => $_POST['numbers][$count]);
  }
  $count++;
}

如果有帮助,请告诉我! :)

注意:我对代码进行了一些修改。

此外,我之前的代码检查空数组空格是否为NULL。如果要检查它们是NULL还是“”(空),请将代码行替换为:

if (($bufferArray[$count]!=NULL)&&($_POST['numbers][$count]!=NULL)&&($bufferArray[$count]!="")&&($_POST['numbers][$count]!=""))
{...}