0

PHP 配列の設定に助けが必要です。多次元配列で少し迷子になります。

現在、次のように複数の製品を含む配列があります。

もしそうなら:print_r($products['1']);私は得る:

Array ( [0] => size:large [1] => color:blue [2] => material:cotton )

などを行うことができprint_r($products['2']);、上記と同様の配列が表示されます。

私はこれを行うことができる場所にそれを取得しようとしています:

echo $products['1']['color']; // the color of product 1

...そして「青」をエコーし​​ます。

次のように、文字列を分解して配列に追加しようとしました。

$step_two = explode(":", $products['1']);

foreach( $step_two as $key => $value){

$products['1'][$key] = $value;

}

私は明らかにexplode / foreachの方法が間違っていることを知っていますが、とにかくコードを投稿したかったのです。これがこれを整理するのに役立つ十分な情報であることを願っています。

4

6 に答える 6

3

これを試して:

foreach ($products as &$product)
{
    foreach ($product as $key => $value)
    {
        list($attribute, $val) = explode(':',$value);
        $product[$attribute] = $val;

        // optional:
        unset($product[$key]);
    }
}
?>
于 2012-05-10T15:56:49.740 に答える
1

最初のフォームから目的のフォームに変換するサンプルを次に示します (出力は下にあります)。

<?php

$a = array( '1' => array('color:blue','size:large','price:cheap'));

print_r($a);

foreach ($a as $key => $inner_array) {
  foreach ($inner_array as $key2 => $attribute) {
    $parts = explode(":",$attribute);
    $a[$key][$parts[0]] = $parts[1];
    //Optional, to remove the old values
    unset($a[$key][$key2]);
  }
}

print_r($a);    
?>

root@xxx:/home/vinko/is# php a.php
Array
(
    [1] => Array
        (
            [0] => color:blue
            [1] => size:large
            [2] => price:cheap
        )

)
Array
(
    [1] => Array
        (
            [color] => blue
            [size] => large
            [price] => cheap
        )

)
于 2012-05-10T15:59:06.087 に答える
0

配列を正しい方法で構築する方がよいでしょうが、問題を解決するにexplodeは、次のようなループにする必要があります。

foreach( $products['1'] as $value){
  $step_two = explode(":", $value);
  $products['1'][$step_two[0]] = $step_two[1];
}

$products別の foreach をラップして、配列全体をループすることができます。

また、配列に古い値と新しい値の両方が含まれないように、新しい配列を作成することもお勧めします$products

于 2012-05-10T15:54:22.160 に答える
0

その通りです。「foreach」と「explode」を間違った方法で取得しました。次のようなことを試してください:

foreach($products['1'] as $param => $value) {
    $kv = explode(":", $value);
    if(count($kv) == 2) {
        $products[$kv[0]] = $kv[1];
        unset($products['1'][$param]);
    }
}

このコードは、まず最初の要素のサブ要素をループしてから、それぞれをコロンで分割し、2 つの部分がある場合はキー値を配列に戻します。

行に注意してください-に設定した後unsetのように、配列要素を削除します。$products['1'][1]products['1']['color']blue

于 2012-05-10T15:54:49.447 に答える
0

すでに$productsそのように構造化されている場合は、次のように構造を変更できます。

$products = array(
  '1' => array(
    0 => 'size:large', 1 => 'color:blue', 2 => 'material:cotton'
  ),
  '2' => array(
    0 => 'size:small', 1 => 'color:red', 2 => 'material:silk'
  ),
);
foreach ($products as &$product) {
  $newArray = array();
  foreach ($product as $item) {
    list($key, $value) = explode(':', $item);
    $newArray[$key] = $value;
  }
  $product = $newArray;
}
print_r($products);

元の配列を上書きしたくない場合は、別の配列$productsに追加してください。$newArray

于 2012-05-10T16:00:52.583 に答える
-2
<?php
  $products = array();
  $new_product = array();

  $new_product['color'] = "blue";
  $new_product['size'] = "large";
  $new_product['material'] = "cotton";

  $products[] = $new_product;

  echo $products[0]['color'];
  //print_r($products);
于 2012-05-10T15:52:34.827 に答える