Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php多重数组多重分解_Php_Sql_Arrays_Explode - Fatal编程技术网

php多重数组多重分解

php多重数组多重分解,php,sql,arrays,explode,Php,Sql,Arrays,Explode,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;

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、b、c、d)(字段编号变量..有时为4或10..)

(1,2,3,4)

预期结果

 a,1,b,2,c,3,d,4,
Insert into Table1 (a,b,c,d) values (1,2,3,4)
我该怎么做才能得到这个结果?(如果这是一个完整的例子就好了)

感谢您提供所有您可以使用的答案。
$output=preg_split(“/(,;:)/”,$input)

接下来,您可以在循环中执行检查

foreach ($output as $value)
   {
      if(is_number($value))
         $keys[] = $value;
      else
         $values[] = $value;    

   }
你可以用。
$output=preg_split(“/(,;:)/”,$input)

接下来,您可以在循环中执行检查

foreach ($output as $value)
   {
      if(is_number($value))
         $keys[] = $value;
      else
         $values[] = $value;    

   }

在最新的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数组,然后在查询中使用任何值之前正确地转义所有$keys值。您可以在此处找到一些信息:

在最近的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数组,然后在查询中使用任何值之前正确地转义所有$keys值。您可以在这里找到一些信息:

我知道
preg\u split()
可以很好地完成任务。但最后一天,当我遇到类似的问题时,我在

请参见演示:

编辑:根据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)). ")";
$d1=“a:1,b:2,c:3,d:4”//字段编号变量。。有时4或10
$d2=爆炸(“,”,$d1);
$result=[];
foreach($d2作为$key=>$value){
列表($k,$v)=分解(“:”,$value);
$result[$k]=$v;
}
打印“”;
打印(结果);
打印“”;
echo“插入到表1(“.introde(',',array_key($result)).”值(“.introde(',',array_value($result)).”);
我知道
preg\u split()
可以很好地完成任务。但最后一天,当我遇到类似的问题时,我在

请参见演示:

编辑:根据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)). ")";
$d1=“a:1,b:2,c:3,d:4”//字段编号变量。。有时4或10
$d2=爆炸(“,”,$d1);
$result=[];
foreach($d2作为$key=>$value){
列表($k,$v)=分解(“:”,$value);
$result[$k]=$v;
}
打印“”;
打印(结果);
打印“”;
echo“插入到表1(“.introde(',',array_key($result)).”值(“.introde(',',array_value($result)).”);

尝试以下逻辑:

$fields = array_keys($arr);
¢values = array_values($arr);
以逗号分隔的形式获取所有字段和值:

$fields = implode(",", array_keys($arr));
$values = implode(",", array_values($arr));
$query = "INSERT INTO Table1 (".$fields.") VALUES (".$values.")";
并在查询中使用以下变量:

$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);

运行snipet:

尝试以下逻辑:

$fields = array_keys($arr);
¢values = array_values($arr);
以逗号分隔的形式获取所有字段和值:

$fields = implode(",", array_keys($arr));
$values = implode(",", array_values($arr));
$query = "INSERT INTO Table1 (".$fields.") VALUES (".$values.")";
并在查询中使用以下变量:

$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);

运行snipet:

由于字符串接近json格式,我认为将其变成真正的json并解码意味着没有循环或分解是一个有效的解决方案

$str ="Insert into Table1 (". Implode(",", $table) .") values (" . Implode(",", $values).")";
Echo $str;

编辑;如果需要命名为预期结果的字符串,请使用以下命令:

$d1 = "a:1,b:2,c:3,d:4"; //field number variable.. sometimes 4 or 10
$d2 = explode(',', $d1);
$colums = $values = array();
foreach ($d2 as $key => $value) {
    $arr1 = explode(':',$value);
    $colums[] = "`".$arr1[0]."`";
    $values[] = "'".$arr1[1]."'";    
}
$sql = 'insert into `Table1` ('.implode(",",$colums).') values ('.implode(",",$values).')';

由于字符串接近于json格式,我认为将其变为真正的json并解码意味着没有循环或分解是一个有效的解决方案

$str ="Insert into Table1 (". Implode(",", $table) .") values (" . Implode(",", $values).")";
Echo $str;

编辑;如果需要命名为预期结果的字符串,请使用以下命令:

$d1 = "a:1,b:2,c:3,d:4"; //field number variable.. sometimes 4 or 10
$d2 = explode(',', $d1);
$colums = $values = array();
foreach ($d2 as $key => $value) {
    $arr1 = explode(':',$value);
    $colums[] = "`".$arr1[0]."`";
    $values[] = "'".$arr1[1]."'";    
}
$sql = 'insert into `Table1` ('.implode(",",$colums).') values ('.implode(",",$values).')';
使用下面的代码。 只需在代码中稍作更改,即可正常工作

使用下面的代码。 只需在代码中稍作更改,即可正常工作


预期/预期结果(a、b、c、d)和(1、2、3、4)需要分开……而不是。。。。a、 1,b,2,c,3,d,4,@RobinVlaar然后编辑你的问题,明确你的预期结果。你混淆了这句话“我该怎么做才能得到这个结果?”@Robinvlar,请查看我对你的预期结果的编辑,并让我知道,好吗?预期/预期结果(a、b、c、d)和(1、2、3、4)需要分开…不是那样。。。。a、 1,b,2,c,3,d,4,@RobinVlaar然后编辑你的问题,明确你的预期结果。你把这句话搞糊涂了“我该怎么做才能得到这个结果?”@RobinVlaar,请查看我对你预期结果的编辑,并让我知道,好吗?@Robin Viaar请立即查看始终欢迎。如果这个答案有效的话,你能接受并投票支持它吗?@Robin Viaar请现在检查始终欢迎。如果这个答案有效,你能接受并投票支持它吗。