我试图通过方法存储用户的输入来获取数据以存储它并进一步处理它而不会覆盖初始的get-value。但我不知道如何......我是否必须将它们存储在数据库中才能做到这一点?或者我可以将每个输入都推送到数组中吗?
答案 0 :(得分:2)
我相信以下内容应该对您有用...这将获取您提供的所有$ _GET并将它们放入一个新数组中,以便您可以修改它们而不会影响原始的$ _GET数组。
if(is_array($_GET)){
$newArr = $_GET; // modify $newArr['postFieldName'] instead of $_GET['postFieldName'] to preserve original $_GET but have new array.
}
那个解决方案会欺骗$ _GET数组。 $ _GET只是一个内部PHP数据数组,就像$ _POST一样。如果你不需要新阵列中的所有GET,你也可以遍历GET ...你可以通过设置一个可接受的GET数组来做到这一点,这样你就可以拉出你需要的那些(这应该是完成的,因为从表单中随机接受GET可能会导致一些麻烦,如果你也使用GETs进行数据库/ sql函数或基于任何权限)。
if(is_array($_GET) && count($_GET) > 0){
$array = array();
$theseOnly = array("postName", "postName2");
foreach($_GET as $key => $value){
if(!isset($array[$key]) && in_array($key, $theseOnly)){ // only add to new array if they are in our $theseOnly array.
$array[$key] = $value;
}
}
print_r($array);
} else {
echo "No $_GET found.";
}
答案 1 :(得分:1)
我只想补充@ Nerdi.org所说的内容。
特别是第二部分,您可以使用array_intersect_key
或array_diff_key
$theseOnly = array("postName", "postName2");
$get = array_intersect_key( $_GET, array_flip($theseOnly);
//Or
$get = array_diff_key( $_GET, array_flip($theseOnly);
array_intersect_key()返回一个数组,其中包含array1的所有条目,这些条目具有所有参数中都存在的键。
所以这个只返回你放在$theseOnly
将来自array1的键与来自array2的键进行比较并返回差异。此函数类似于array_diff(),除了对键而不是值进行比较。
所以这个会返回你没有放在$theseOnly
并且
array_flip()以翻转顺序返回一个数组,即数组中的键变为值,数组中的值变为键。
这只是获取没有键的名称数组(默认情况下它有数字键),并交换键和值,所以
$theseOnly = array_flip(array("postName", "postName2"));
//becomes
$theseOnly = array("postName"=>0, "postName2"=>1);
我们需要这样的键,以便它们匹配$_GET
数组中的键。我们总是可以用这种方式编写数组,但如果你像我一样懒,那么你就可以翻转它。
答案 2 :(得分:0)
session_start();
if(!isset($_SESSION['TestArray'])) $_SESSION['TestArray'] = array();
if(is_array($_GET)){
$_SESSION['TestArray'][] = $_GET;
}
print_r($_SESSION['TestArray']);
感谢大家的帮助!这对我有用!