Php代码
<?php
$d1 = "a:1,b:2,c:3,d:4"; //field number variable.. sometimes 4 or 10
$d2 = explode(',', $d1);
foreach ($d2 as $key => $value) {
$arr1 = explode(':',$d2[$key]);
foreach ($arr1 as $key1 => $value1) {
$arr1[] = $key1;
}
echo $arr1[0] . "," . $arr1[1] . ",";
}
?>
结果
a,1,b,2,c,3,d,4,
字段(a,b,c,d)(字段编号变量..有时为4或10 ..)
值(1,2,3,4)
预期结果
Insert into Table1 (a,b,c,d) values (1,2,3,4)
我该如何做到这个结果? (如果它是一个完整的例子会很好)
感谢所有答案
答案 0 :(得分:1)
在最近的PHP版本中,您可以将$ d2 [$ key]上的explode()结果(你应该改进你的命名,它有所帮助!)分解为两个独立的数组,如下所示:
$keys = $values = [];
foreach (explode(',', $d1) as $parameter)
[$keys[], $values[]] = explode(':', $parameter);
var_dump($keys, $values);
var_dump(array_combine($keys, $values));
之后,您可以将其构建到查询中。但是,您的数据似乎可能是用户提供的,因此您应该非常警惕这些数据。您似乎几乎在代码中引入了SQL注入漏洞。
我建议在白名单中检查$ keys数组,然后在查询中使用任何这些之前正确转义所有$值。您可以在此处找到一些信息:PDO with INSERT INTO through prepared statements
答案 1 :(得分:1)
我知道preg_split()
可以完成任务。但是在我遇到类似问题的最后一天,我在http://php.net/manual/en/function.explode.php#111307
function multiexplode ($delimiters,$string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$d1 = "a:1,b:2,c:3,d:4";
$result = implode(',',multiexplode(array(",",".","|",":"),$d1));
echo $result;
请参阅演示:https://eval.in/871705
编辑按照SO的评论
$d1 = "a:1,b:2,c:3,d:4"; //field number variable.. sometimes 4 or 10
$d2 = explode(',', $d1);
$result = [];
foreach ($d2 as $key => $value) {
list($k,$v) = explode(':',$value);
$result[$k] = $v;
}
print '<pre>';
print_r($result);
print '</pre>';
echo "INSERT INTO table1 (".implode(', ',array_keys($result)). ") VALUES (".implode(', ',array_values($result)). ")";
答案 2 :(得分:0)
您可以使用preg_split。
$output = preg_split( "/ (,|:) /", $input );
接下来,您可以循环检查。
foreach ($output as $value)
{
if(is_number($value))
$keys[] = $value;
else
$values[] = $value;
}
答案 3 :(得分:0)
尝试使用以下逻辑:
<?php
if(isset($_POST['submitDelivered'])){
$order_id = trim(addslashes($_POST['t_order_id']));
$query = "UPDATE order_tbl SET `order_status`='Delivered' WHERE `order_id` = $order_id";
if (mysqli_query(connection2(), $query)) {
mysqli_query(connection2(), "COMMIT");
$_SESSION['message'] = "Order Delivered"; }
else {
$_SESSION['message'] = mysqli_error(connection2());
mysqli_query(connection2(), "ROLLBACK");
}
}
if(isset($_POST['submitAccept'])){
$order_id = trim(addslashes($_POST['t_order_id']));
$query = "UPDATE order_tbl SET `order_status`='Accepted' WHERE `order_id` = $order_id";
if (mysqli_query(connection2(), $query)) {
mysqli_query(connection2(), "COMMIT");
$_SESSION['message'] = "Order Accepted"; }
else {
$_SESSION['message'] = mysqli_error(connection2());
mysqli_query(connection2(), "ROLLBACK");
}
}
if(isset($_POST['submitCancel'])){
$order_id = trim(addslashes($_POST['t_order_id']));
$query = "UPDATE order_tbl SET `order_status`='Cancelled' WHERE `order_id` = $order_id";
if (mysqli_query(connection2(), $query)) {
mysqli_query(connection2(), "COMMIT");
$_SESSION['message'] = "Order Cancelled"; }
else {
$_SESSION['message'] = mysqli_error(connection2());
mysqli_query(connection2(), "ROLLBACK");
}
}
?>
以逗号分隔所有字段和值:
foreach ($d2 as $key => $value) {
$arr1 = explode(':', $value);
if (count($arr1) == 2){
$arr[$arr1[0]] = $arr1[1];
}
}
将这些变量用于您的查询:
$fields = array_keys($arr);
¢values = array_values($arr);
正在运行snipet:https://ideone.com/EXAPOt
答案 4 :(得分:0)
由于字符串接近json格式,我认为使其成为真正的json并解码它意味着没有循环或爆炸是一种有效的解决方案。
$d1 = "a:1,b:2,c:3,d:4";
$d1 = "{\"".str_replace(array(",",":"),array('","','":"'), $d1)."\"}";
$arr = json_decode($d1, true);
$table = array_keys($arr);
$values = array_values($arr);
Var_dump($table);
Var_dump($values);
编辑;如果你需要你命名为预期结果的字符串,请使用:
$str ="Insert into Table1 (". Implode(",", $table) .") values (" . Implode(",", $values).")";
Echo $str;
答案 5 :(得分:0)
在代码下方使用。 只需对代码进行一点点更改就可以了。
switch (args[0]) {
case "ping"; //here should be :
message.channel.sendMessage("Pong!");
break;
}