在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.