Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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中操纵字符串生成ID和变量数组_Php_Sql_Arrays - Fatal编程技术网

在PHP中操纵字符串生成ID和变量数组

在PHP中操纵字符串生成ID和变量数组,php,sql,arrays,Php,Sql,Arrays,我有一个字符串,看起来是这样的: orders = "{1:2, 3:4, 23:45, 12:56}" 这些对联的顺序长度可能不同 冒号左边的第一个数字是ID,第二个数字是数量, i、 e,12:56=ID:12数量:56 它是这种字符串格式,所以我可以轻松地将它作为一个大数据块存储在数据库中 我想获取以下格式的字符串: Array ( ID => Quantity, ID => Quantity ) 喜欢 Array ( 1 => 2, 3

我有一个字符串,看起来是这样的:

orders = "{1:2, 3:4, 23:45, 12:56}"
这些对联的顺序长度可能不同

冒号左边的第一个数字是ID,第二个数字是数量, i、 e,12:56=ID:12数量:56

它是这种字符串格式,所以我可以轻松地将它作为一个大数据块存储在数据库中

我想获取以下格式的字符串:

Array (
    ID => Quantity,
    ID => Quantity
)
喜欢

Array (
   1 => 2,
   3 => 4
)
到目前为止,我已经删除了声明中的所有括号:

$string = substr(orders, 1, (strlen($intel['order']) - 2));
$chunks = explode(",", $string);
然后,我使用了以下语句:

$string = substr(orders, 1, (strlen($intel['order']) - 2));
$chunks = explode(",", $string);
给我:
数组(
[0] => 1:2
[1] => 3:4
)

是否有更简单的方法格式化此数组? 我的第二个呼叫端口是使用另一个端口
$chunks2=explode(“:”,$chunks)
但是我无法将索引设置为ID号

谢谢各位



->最后,我将使用for循环运行多个UPDATE SQL语句,将项目的“库存”更改为(“库存”-“数量”),其中id=此id。

内置序列化/取消序列化函数

$orders = "{1:2, 3:4, 23:45, 12:56}";
//Clean up 
$orders = substr(trim($orders),1,-1);
//Separate
$orders=explode(',',$orders);
$final=array();
//Loop
foreach ($orders as $order) {
  //Explode
  $order=explode(':',trim($order));
  //Sanitize
  if (sizeof($order)!=2) die("Bad data: Error 1");
  if (!is_numeric($order[0]))  die("Bad data: Error 2: '".$order[0]."'");
  else $order[0]+=0;
  if (!is_numeric($order[1]))  die("Bad data: Error 3: '".$order[1]."'");
  else $order[1]+=0;
  //Tabulate
  if (!isset($final[$order[0]])) $final[$order[0]]=$order[1];
  else $final[$order[0]]+=$order[1];
}

print_r($final);
如果您对字符串的格式要求不太严格,我建议您看看“”和“”函数

serialize($array)将数组转换为字符串,如下所示: a:size:{key definition;value definition;(repeated per element)} 大小:{键定义;值定义;(每个元素重复)}

所以,数组(1=>2,3=>4)将变成“a:2{i:1;i:2;i:3;i:4}” [其中i表示整数,a表示数组]


而unserialize($string)将把字符串转换回数组。

内置序列化/unserialize函数

如果您对字符串的格式要求不太严格,我建议您看看“”和“”函数

serialize($array)将数组转换为字符串,如下所示: a:size:{key definition;value definition;(repeated per element)} 大小:{键定义;值定义;(每个元素重复)}

所以,数组(1=>2,3=>4)将变成“a:2{i:1;i:2;i:3;i:4}” [其中i表示整数,a表示数组]


而unserialize($string)将把字符串转换回数组。

内置序列化/unserialize函数

如果您对字符串的格式要求不太严格,我建议您看看“”和“”函数

serialize($array)将数组转换为字符串,如下所示: a:size:{key definition;value definition;(repeated per element)} 大小:{键定义;值定义;(每个元素重复)}

所以,数组(1=>2,3=>4)将变成“a:2{i:1;i:2;i:3;i:4}” [其中i表示整数,a表示数组]


而unserialize($string)将把字符串转换回数组。

内置序列化/unserialize函数

如果您对字符串的格式要求不太严格,我建议您看看“”和“”函数

serialize($array)将数组转换为字符串,如下所示: a:size:{key definition;value definition;(repeated per element)} 大小:{键定义;值定义;(每个元素重复)}

所以,数组(1=>2,3=>4)将变成“a:2{i:1;i:2;i:3;i:4}” [其中i表示整数,a表示数组]


unserialize($string)将把字符串转换回数组。

实际上,您可能应该考虑将它们存储在具有相关ID和数量的单独行中,但是如果您必须将这些内容存储在一个块中,我会使用JSON/serialize()或其他易于使用的东西。然而,这应该是可行的:

preg_match_all('/(\d+):(\d+)/', $orders, $matches);
$result = array_combine($matches[1], $matches[2]);

实际上,您可能应该考虑将它们存储在具有相关ID和数量的单独行中,但是如果您必须像这样一块存储东西,我将使用JSON/serialize()或其他易于使用的东西。然而,这应该是可行的:

preg_match_all('/(\d+):(\d+)/', $orders, $matches);
$result = array_combine($matches[1], $matches[2]);

实际上,您可能应该考虑将它们存储在具有相关ID和数量的单独行中,但是如果您必须像这样一块存储东西,我将使用JSON/serialize()或其他易于使用的东西。然而,这应该是可行的:

preg_match_all('/(\d+):(\d+)/', $orders, $matches);
$result = array_combine($matches[1], $matches[2]);

实际上,您可能应该考虑将它们存储在具有相关ID和数量的单独行中,但是如果您必须像这样一块存储东西,我将使用JSON/serialize()或其他易于使用的东西。然而,这应该是可行的:

preg_match_all('/(\d+):(\d+)/', $orders, $matches);
$result = array_combine($matches[1], $matches[2]);

如果输入错误,例如
{…abc12:34def,…}
,此操作将失败。当然,如果输入不需要消毒,这将是最快的方法+1.如果输入错误,例如
{…abc12:34def,…}
,此操作将失败。当然,如果输入不需要消毒,这将是最快的方法+1.如果输入错误,例如
{…abc12:34def,…}
,此操作将失败。当然,如果输入不需要消毒,这将是最快的方法+1.如果输入错误,例如
{…abc12:34def,…}
,此操作将失败。当然,如果输入不需要消毒,这将是最快的方法+1.