【问题标题】:How to find data in multi-dimensional array in php?如何在php中查找多维数组中的数据?
【发布时间】:2013-02-02 03:15:10
【问题描述】:

比方说,我有类似下面的东西(数量可以是可变的):

Product Color   XS   S    M    L    XL
   A    RED     100  200  200  200  100
   A    WHITE    50  100  200  100   20
   B    RED      50  200  200  100   50
   B    WHITE   100  200  300  200  100

如果我将它们保存到这样的数组中:

$product_array[] = 
    array('product' => 'A', 'color'  => 'RED',
          'XS'      => 100, 'S'      => 200,
          'M'       => 200, 'L'      => 200, 
          'XL' =>100);

查找尺码数量并更新给定产品 ID 和颜色的最简单方法是什么?比方说,(A, RED) 卖了 XS 码 10 数量?

【问题讨论】:

  • 我会把它放在数据库中。
  • 使用产品名称作为数组索引
  • 不仅仅是名称作为索引 - 让每个产品名称成为子数组的索引,每个产品颜色都是该子数组的子数组,其中包含作为键的尺寸。所以$products['A']['RED']['XL'](实际上,它在数据库中是最简单的)
  • 所有产品和数量都是从数据库中读取的。现在想在给定条件下显示给用户

标签: php arrays


【解决方案1】:

如 cmets 中所述,您可以使用项目名称 + 颜色作为索引。 如果你需要使用给定的格式,你可以创建引用数组来固定。

$product_array[] = 
    array('product' => 'A', 'color'  => 'RED',
      'XS'      => 100, 'S'      => 200,
      'M'       => 200, 'L'      => 200, 
      'XL' =>100);
$product_array[] = 
    array('product' => 'B', 'color'  => 'GREEN',
      'XS'      => 100, 'S'      => 200,
      'M'       => 200, 'L'      => 200, 
      'XL' =>100);

foreach($product_array as &$product)
{
    $product_by_name_and_color[$product['product']][$product['color']] =& $product;
}

然后:

$product_by_name_and_color['B']['GREEN']['XS'] += 5;
print_r($product_array);

编辑:

如果您的产品从数据库中显示为红色,则很可能您想更新数据库中的值并且您问错了问题。

【讨论】:

  • 不,我不想更新到 db。一旦从分贝读取。我需要执行完全不同的操作。我需要根据给定的条件重新分配它们。回到你的代码,在 foreach 语句中,如何匹配产品和颜色后如何更新匹配项目的数量?
  • 我猜这就是你的意思 foreach($product_array as &$p) { if( $p['product'] == 'A' && $p['color'] == '红' ) { $qty = $p['XS']+$p['S']+$p['M']+$p['L']+$p['XL']; } }
  • foreach 循环也创建了 $product_by_name_and_color,一个引用数组。下一段代码展示了如何更新产品。
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多