1

分離して多次元配列を作成したい文字列があります。文字列は次のようになります。

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

    }

}

私は明らかにこれで迷っています...何か提案はありますか?

4

4 に答える 4

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を追加して、属性が同じアイテムに追加されるようにします。

于 2012-05-10T17:16:48.830 に答える
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;
于 2012-05-10T16:27:57.337 に答える
0

あなたはほとんどそこにいます。インナーforeachを交換するだけ

foreach ($eachvalue as $value) {
    $properties = explode(':', $value);
    $item[$i][$properties[0]] = $properties[1];

}
于 2012-05-10T16:29:59.210 に答える
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ください:

于 2012-05-10T16:23:23.363 に答える