我有几个$ _REQUEST数组。例如:$ _REQUEST ['name']和$ _REQUEST ['email']。也就是说,在这些数组中还有一个数组。原来是数组中的一个数组。
给他们赋值
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
现在我需要删除具有该值的第一个键。为此,我使用了 array_shift
array_shift($name);
array_shift($email);
所以我摆脱了第一个值。但是,除了名称和电子邮件,还有其他名称和电子邮件。每个人都不需要写 array_shift 。如何使用一项功能将其应用于所有人?
谢谢
UPD
例如$ _REQUEST数组:
Array (
[name] => Array (
[0] =>
[1] => myName
)
[email] => Array (
[0] =>
[1] => myEmail
)
[other] => Array (
[0] =>
[1] => otherDatas
)
)
我必须摆脱这些空元素
答案 0 :(得分:1)
如果我的理解正确,那么您的请求中有多个数组,并且您想对所有数组执行array_shift
吗?
您可以遍历$_REQUEST
并将该函数应用于所有数组。也许像这样:
foreach ($_REQUEST as &$value) {
if (is_array($value) && empty($value[0])) {
array_shift($value);
}
}
这将移动您请求中的所有数组,而将任何其他变量保留下来。
编辑:将示例更新为仅对第一个元素为空的数组进行移位。
EDIT2:在&
中添加了$value
,以便您可以直接更改$_REQUEST
变量。
答案 1 :(得分:0)
array_filter将清除空值,即使它们在任何索引处。
$cleanArray = array();
foreach ($_REQUEST as $key => $value) {
$cleanArray[$key] = array_filter($value);
}
输出
Array (
[name] => Array (
[1] => myName
)
[email] => Array (
[1] => myEmail
)
[other] => Array (
[1] => otherDatas
)
)
请注意,它还将清除null
,(blank)
和false
之类的值。 Example Reference
答案 2 :(得分:0)
您可能要做的是使用$_REQUEST
中所需的键创建一个数组,然后使用array_intersect_key获取您的子集。
然后使用array_map检查值是否为数组,并使用array_filter返回该值以删除您认为为空的所有值:
$keys = [
"name",
"email"
];
$result = array_map(function ($x) {
if (is_array($x)) {
return array_filter($x, function($y){
return null !== $y && "" !== trim($y);
});
}
return $x;
}, array_intersect_key($_REQUEST, array_flip($keys)));
print_r($result);