我有两组来自$_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():两个参数应具有相同数量的元素
使用带有ARRAY_FILTER_USE_BOTH
标志的array_filter
怎么样?
<?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)
}
*/
这里有一个有趣的方法:
$result = array_flip(array_flip(array_filter(array_combine($_POST['names'],
$_POST['numbers']))));
// 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);
如果两个数组的计数相同,并且键始终为数字,则可以执行以下操作:
$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];
}
}
考虑您之前的信息:
两个键都是数字,计数将相同,因为它们成对作为名称和数字出现
$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]!=""))
{...}