gpt4 book ai didi

使用 foreach 制作的 PHP 变量

转载 作者:可可西里 更新时间:2023-11-01 13:02:47 24 4
gpt4 key购买 nike

我有几个变量来自 $POST_['array'] 中的一个数组我想做一些循环,例如 foreach,它为变量中的每个值创建一个变量名并为其赋值.

例如如果我有

$POST_['name'];
$POST_['last'];
$POST_['age'];
$POST_['sex'];

我希望循环从 $_POST 中的数组创建每个变量,变量名称如下:

$name = 'John';
$last = 'Doe';
$age = '32';
$sex = 'male';

注意 - 该数组来自序列化的 jquery 字符串,该字符串将表单中的所有变量和值放在一个大字符串中。

这可能吗?

最佳答案

你不需要循环,你需要 extract :

extract($_POST); // But use caution, see below


注意事项和最佳做法

如评论中所述,这会将 $_POST 数组中的所有参数强制放入当前符号空间。

在全局空间

<?php
extract($_GET);
var_dump($_SERVER); // Can be overwritten by the GET param
?>

上面的代码说明了问题as shown in this answer — 一些非常危险的东西可以在全局空间中被覆盖。

函数内部

function myFunc() {
// (Mostly) empty symbol space! (excluding super globals)
extract($_POST);
}

在函数内部,作为第一行,没有什么坏处。

重要说明:您可能认为因为$_SERVERsuper global ,这种利用也可能发生在函数内部。然而,在我的测试中,在 PHP 版本 5.3.4 上,它是函数内部安全$_SERVER$_POST $_GET$_SESSION 或其他可能的超全局变量可能会被覆盖。

有选项

您还可以使用 extract with extract_type options that do not overwrite .

在我看来,最好的选择是简单地为提取的所有变量添加前缀:

// $_GET = test=1&name=Joe

extract($_GET, EXTR_PREFIX_ALL, "request_get");

echo $request_get_test; // 1
echo $request_get_name; // Joe

这样你就没有覆盖问题,但你也知道你从数组中获得了所有内容。

备用 - 带条件的循环

如果您想手动执行此操作(但仍然是动态的),只想有条件地提取少数变量,您可以使用 variable variables :

foreach ($_POST as $key => $value) {
if (isset($$key)) continue;

$$key = $value;
}

(我使用的示例条件是防止覆盖。)

关于使用 foreach 制作的 PHP 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com