我有来自jquery的地图:
82|81|83|84|85|86|87|88|89
我需要遍历这个地图并在mysql查询中使用它,我想做一个while循环,以便在第一次迭代中:
$ID = 82; $Position = 1;
第二次迭代:
$ID = 81; $Position = 2;
第三次迭代:
$ID = 83; $Position = 3;
......等等。感谢。
答案 0 :(得分:1)
$arr = explode('|', $themap);
$length = count($arr);
for($i = 1; $i <= $length; $i++){
// Here $i contains position
// $arr[$i-1] contains the ID
}
PS。我强烈建议不将查询放在循环中,除非绝对需要。使用单个查询会更好。您可以使用MySQL的CASE WHEN THEN END
语法在单个查询中获得所需内容。
答案 1 :(得分:1)
在您的情况下,您可以在PHP中使用regular expression
或explode
代码
<?php
$var = "82|81|83|84|85|86|87|88|89";
$list = preg_split('/[^\d{2}]|\s/', $var);
print_r($list);
print_r(explode('|', $var));
?>
Output
Array
(
[0] => 82
[1] => 81
[2] => 83
[3] => 84
[4] => 85
[5] => 86
[6] => 87
[7] => 88
[8] => 89
)
Array
(
[0] => 82
[1] => 81
[2] => 83
[3] => 84
[4] => 85
[5] => 86
[6] => 87
[7] => 88
[8] => 89
)
在这种情况下,您可以使用explode
,但regex
可以解决任何复杂问题。只要有意义,请尝试使用它。
答案 2 :(得分:0)
你可以爆炸它,并使用键+ 1作为你的位置值。
$vals = explode("|", "82|81|83");
foreach ( $vals as $pos => $val )
echo 'Position: ' . ($pos+1) . ' Value: ' . $val . '<br/>';
/* Outputs:
Position: 1 Value: 82
Position: 2 Value: 81
Position: 3 Value: 83
*/
答案 3 :(得分:0)
使用PHP explode()
函数将字符串拆分为多个部分。
<?php
$my_array = explode('|',$input_string);
?>
答案 4 :(得分:0)
以下代码:
<?php
$map_orig = '82|81|83|84|85|86|87|88|89';
$map = explode('|', $map_orig);
foreach ($map as $pos => $item) {
print '$ID = '.$item.', $Position = '.($pos+1).PHP_EOL;
}
会给你以下结果:
$ID = 82, $Position = 1
$ID = 81, $Position = 2
$ID = 83, $Position = 3
$ID = 84, $Position = 4
$ID = 85, $Position = 5
$ID = 86, $Position = 6
$ID = 87, $Position = 7
$ID = 88, $Position = 8
$ID = 89, $Position = 9
请参阅this CodePad snippet以获取证明。
如果您对此解决方案有任何疑问,请告诉我。
答案 5 :(得分:0)
$map = [82, 81, 83, 84,85,86,87,88,89];
for($i=1; $i<=$map.count(); $i++){
$ID = $map[$i-1];
$Position = $i;
}
答案 6 :(得分:0)
$map = explode('|', $jQueryMap);
foreach ($map as $position => $ID)
{
...
}