用于array_shift

时间:2018-11-16 09:14:41

标签: php arrays

我有几个$ _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
  )
)

我必须摆脱这些空元素

3 个答案:

答案 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);

Demo