我知道可能有这方面的消息来源,但我尝试了一切,但我仍然没有得到正确的解决方案。这就是为什么我要求你帮忙。
我有一个$ _POST数组,我想将值放在一个数组中。这是我想要的最终结果:
$response = [
['category' => 2, 'value' => "june"],
['category' => 5, 'value' => "may"],
['category' => 8, 'value' => "april"]
]
这是catch,$ _POST包含一个整数的值,中间有一个空格,然后是一个字符串,例如“2月6日”,“5月5日”等等
当我得到这个值时,我使用explode将其拆分,然后尝试将各个值添加到响应数组中。这只会添加一个结果。
我尝试了什么:
$response = [];
foreach ($_POST as $key => $value) {
$split = explode(" ", $value);
$result = ['category' => $split[0], 'value' => $split[1]];
$response[] = $result;
}
由于某种原因,结果不如上所述。任何想法和建议将不胜感激。
答案 0 :(得分:1)
基本上,问题在于$ _POST。这是具有提交的键值数据的全局数组。你不应该使用
foreach ($_POST as $key => $value) {
无需任何检查即可解析数据。这些数据由用户提交,并不总是具有您正在等待的格式。
例如,如果您的HTML表单中有一个变量“dates”,那么您应该准备好$_POST['dates']
将是您所有'5月6日','7月7日'等的数组。等等。不要忘记检查并验证收到的所有用户数据。安全理由也很重要。
你的代码(foreach body,没有条件)没问题,我已经检查过了。尝试在print_r()
之前设置explode()
,您将看到您正在使用数组,而不是使用字符串。
答案 1 :(得分:0)
您的问题在将数据处理到正确的结果数组时没有问题。由于没有持有预期的数据,因此_POST的责任落在了上面。 这个问题的所有答案都无法修复您的$ _POST数据,因为您的问题没有提供html表单。可以提供的唯一潜在价值是优化阵列构建过程。
以下两种方法可以通过减少声明变量的数量来改善您的过程:
演示使用$a=array('2 june','5 may','8 april');
来表示$ _POST数组。
foreach循环中的单行:
foreach($a as $v){
$r[]=array_combine(["category","value"],explode(" ",$v));
}
没有循环的单行:
$r=array_map(function($v){return array_combine(["category","value"],explode(" ",$v));},$a);
使用任一流程,生成的$r
将为:
array (
0 =>
array (
'category' => '2',
'value' => 'june',
),
1 =>
array (
'category' => '5',
'value' => 'may',
),
2 =>
array (
'category' => '8',
'value' => 'april',
),
)
使用函数的参考: explode(),array_combine(),array_map()
答案 2 :(得分:-1)
试试这个:
$response = [];
// just for example use this one
$data = "2 june, 5 may, 7 july";
$temp = explode(",", $data);
// and you can use this one for your case
/*$data = $_POST['var_name']; // var_name is your variable name from $_POST
$temp = explode(",", $data);*/
foreach ($temp as $key => $value) {
$split = explode(" ", trim($value));
foreach ($split as $val) {
$result = ['category' => $split[0], 'value' => $split[1]];
}
$respon[] = $result;
}
echo "<pre>";
echo print_r($respon);
echo "</pre";
输出:
Array
(
[0] => Array
(
[category] => 2
[value] => june
)
[1] => Array
(
[category] => 5
[value] => may
)
[2] => Array
(
[category] => 7
[value] => july
)
)
答案 3 :(得分:-1)
$response = array();
foreach ($_POST as $key => $value) {
$split = '';
$split = explode(" ", $value);
$result = array('category' => $split[0], 'value' => $split[1]);
$response[] = $result;
}