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;

}

我知道我显然做错了爆炸 / 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];
}

你可以在它周围包裹另一个 foreach 来循环你的整个$products数组。

而且您还最好构建一个新数组,以避免数组中同时包含旧值和新值$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]);
    }
}

此代码首先循环遍历第一个元素的子元素,然后用冒号分割每个子元素,如果有两个部分,则将键值设置回数组中。

请注意这一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 回答