我有一个字符串,我想分开并制作一个多维数组。字符串如下所示:
$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,";
不幸的是,我无法控制字符串的组合方式,这就是为什么我要创建这个数组的原因。
我的目标是制作一个这样的数组:
$item[1]['color'] // = blue
$item[2]['material'] // = silk
所以,这就是我所做的:
$item = array();
$i=0; // I know this is messy
$eachitem = explode("item-",$string);
array_shift($eachitem); // get rid of the first empty item
foreach ($eachitem as $values) {
$i++; // Again, very messy
$eachvalue = explode(",",$values);
array_pop($eachvalue); // get rid of the last comma before each new item
foreach ($eachvalue as $key => $value) {
$item[$i][$key] = $value;
}
}
我显然已经迷失了......有什么建议吗?
答案 0 :(得分:0)
你很接近,我就是这样做的:
$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,";
$substr = explode("item-", $string);
$items = array();
foreach ($substr as $string) {
$subitems = array();
$pairs = explode(",", $string);
foreach ($pairs as $pair) {
list($key, $value) = explode(":", $pair, 2);
$subitems[$key] = $value;
}
$items[] = $subitems;
}
var_dump($items);
在这里使用list
非常棒:)请注意,explode
中需要额外的计数限制器,否则如果:
更多,您可能会丢失数据。
答案 1 :(得分:0)
$array = array();
$string = explode(',', $string);
foreach($string as $part):
$part = trim($part);
if(strlen($part) < 3) continue;
$part = explode(':', $part);
$array[$part[0]] = $part[1];
endforeach;
答案 2 :(得分:0)
你大部分都在那里。只需用
替换内部foreach
即可
foreach ($eachvalue as $value) {
$properties = explode(':', $value);
$item[$i][$properties[0]] = $properties[1];
}
答案 3 :(得分:0)
$string = "item-size:large,color:blue,material:cotton,item-size:medium,color:red,material:silk,";
$num_attr = 3;
$item = array();
$i=$x=0;
foreach(explode(',', trim($string,',')) as $attr)
{
list($key, $value) = explode(':', $attr);
$item[$x+=($i%$num_attr==0?1:0)][$key] = $value;
$i++;
}
将$ num_attr设置为字符串中项目属性的数量(如果它们增长/缩小,将允许将来进行调整)。 foreach内部的修剪正在删除像最后一个逗号一样的“空”数据(如果有人出现,它也会删除一个空的第一个逗号)。疯狂的$ item [$ x + =($ i%$ num_attr == 0?1:0)]是取计数器的模数/属性的数量,当它为0时,这意味着我们在一个新的产品线上,所以我们在x中添加1来填充项目编号索引,如果模数返回一个数字,那么我们知道我们在同一个产品上,所以我们添加0不会更改项目索引,以便将属性添加到同一项目。