我有两组来自$_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():两个参数都应具有相同数量的元素
答案 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]!=""))
{...}