我试图遍历我通过jQuery发布的一些数据。这是我的PHP脚本:
<?php
include '../dbconnect.php';
$map = $_POST['map'];
$position = 0;
foreach ($map as $ID)
{
if ($_POST['type'] == "sub") {
$query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';";
} else {
$query = "UPDATE Categories SET `Position` = '$position' WHERE CategoryID = '$ID';";
}
$result = mysql_query($query) or die(mysql_error());
$position ++;
}
?>
并且收到的数据为$ map以这种格式发送:
ID [] = 27和ID [] = 28和ID [] = 33和ID [] = 19
显然我的foreach
是错误的,但我如何才能获得它以保留$map
的顺序,每个数值变为变量$ID
?
答案 0 :(得分:2)
好的,因为你的$ map包含ID[]=27&ID[]=28&ID[]=33&ID[]=19
字符串值。做这样的事情
$str = str_replace($map, "ID[]=","");
$mArr = explode("&", $str);
foreach($mArr as $key) {
//now your $key will have 27, 28, 33, 19 as the loop progresses
}
<子> P.S。基于OP的$ map注释,其中包含
的字符串输出答案 1 :(得分:0)
我不完全确定,但这是你的意思吗?如果我正确理解你的问题,它就有效。
<?php
include '../dbconnect.php';
$position = 0;
$pattern = '/ID\\[\\]=(\d+)&*/';
$subject = $_POST['map'];
preg_match_all($pattern, $subject, $matches);
foreach ($matches as $k => $ID) {
// etc
测试用例
在单独的脚本中尝试此测试。如果您使用此脚本,则$ matches [1]的输出将提供给foreach循环。这会检索你想要的吗?
<?php
$pattern = '/ID\\[\\]=(\d+)&*/';
$subject = 'ID[]=27&ID[]=28&ID[]=33&ID[]=19';
preg_match_all($pattern, $subject, $matches);
echo '<pre>'.print_r($matches,1).'</pre>';
?>
输出:
Array
(
[0] => Array
(
[0] => ID[]=27&
[1] => ID[]=28&
[2] => ID[]=33&
[3] => ID[]=19
)
[1] => Array
(
[0] => 27
[1] => 28
[2] => 33
[3] => 19
)
)
答案 2 :(得分:0)
您能告诉我们print_r($map);
显示的内容吗?
如果它只是您所描述格式的字符串,我建议将地图格式更改为更容易循环的内容,如json。例如
{"map":[27,28,33,19]}
然后你可以使用
<?php
$mapObject = json_decode($_POST['map']);
$mapArray = $mapObject->map;
foreach($mapArray as $id)
{
echo $id;
}
?>
答案 3 :(得分:0)
你可以在没有地图的情况下发布它,只需
$.ajax({ type: 'POST', url: 'updatecategoryposition.php', data: map + "&type=sub" });
我假设地图包含'ID [] = 27&amp; ID [] = 28&amp; ID [] = 33&amp; ID [] = 19'
作为替代方案,你可以用不同的格式保存地图,这样你最终得到的地图只是一个ID列表($ map =“27,28,33,19”),使用原始的jquery帖子,最后使用
$map = explode(',' $_POST['map']);
答案 4 :(得分:0)
感谢您的尝试,但最终我无法获得任何建议,但我确实找到了解决方案:
更新类别位置:
<?php
include '../dbconnect.php';
foreach ($_POST['ID'] as $position => $ID){
$query = "UPDATE Subcategories SET `Position` = '$position' WHERE CategoryID = '$ID';";
$result = mysql_query($query) or die(mysql_error());
}
?>
和新的Jquery帖子请求由Starx提供(告诉我删除变量名称),因此我可以访问上面的查询字符串:
$.ajax({
type: 'POST',
url: 'updatecategoryposition.php',
data: map
});