在PHP中操作字符串以生成ID和变量的数组


Manipulating string in PHP to make array of IDs and variables

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

orders = "{1:2, 3:4, 23:45, 12:56}"

这些订单对联的长度可能不同

冒号左侧的第一个数字是ID,第二个数字是数量,即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);

给我:Array ( [0] => 1:2 [1] => 3:4 )

有没有一种更简单的方法来格式化这个数组?我的第二个停靠港是使用另一个$chunks2 = explode(":", $chunks);但是我很难将索引设置为ID号。。

谢谢大家。


->最后,我将使用for循环来运行多个UPDATE SQL语句,将项目的"库存"更改为("库存"-"数量")WHERE id=this 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);

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

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

内置序列化/非序列化函数

如果你对字符串的格式不太严格,我建议你看看"serialize"answers"unserialize"函数。

serialize($array)将数组转换为字符串,如下所示:

a:size:{键定义;值定义;(每个元素重复)}

因此,

Array(1=>2,3=>4)将变为"a:2{i:1;i:2;i:3;i:4}"
[其中i表示整数,a表示数组]

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