【问题标题】:How do I group same array value如何对相同的数组值进行分组
【发布时间】:2011-02-23 02:56:59
【问题描述】:

我的数组示例

$options = array(
    array("brand" => "Puma","code" => "p01","name" => "Puma One"),
    array("brand" => "Puma","code" => "p02","name" => "Puma Two"),
    array("brand" => "Puma","code" => "p03","name" => "Puma Three"),
    array("brand" => "Nike","code" => "n01","name" => "Nike One"),
    array("brand" => "Nike","code" => "n02","name" => "Nike Two"),
    array("brand" => "Nike","code" => "n03","name" => "Nike Three"),
    array("brand" => "Nike","code" => "n04","name" => "Nike Four"),
    array("brand" => "Adidas","code" => "a01","name" => "Adidas One"),
    array("brand" => "Adidas","code" => "a02","name" => "Adidas Two"),
    array("brand" => "Adidas","code" => "a03","name" => "Adidas Three"),
    array("brand" => "Adidas","code" => "a04","name" => "Adidas Four"),
    array("brand" => "Adidas","code" => "a05","name" => "Adidas Five"),
    array("brand" => "Adidas","code" => "a06","name" => "Adidas Six")
);

如何生成这个数组是

<select name="products" id="products">
  <optgroup label="Puma">
  <option value="p01">Puma One</option>
  <option value="p02">Puma Two</option>
  <option value="p03">Puma Three</option>
  </optgroup>
  .......
  <optgroup label="Adidas">
  <option value="a01">Adidas One</option>
  <option value="a02">Adidas Two</option>
  <option value="a03">Adidas Three</option>
  .......
  </optgroup>
</select>

或者您可以根据我的选择选项输出建议更好的数组。让我知道。

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    您可以创建另一个以品牌为键的数组:

    $newOptions = array();
    foreach ($options as $option) {
      $brand = $option['brand'];
      $code = $option['code'];
      $name = $option['name'];
    
      $newOptions[$brand][$code] = $name;
    }
    

    这将产生一个像这样的数组:

    $newOptions = array(
      'Puma' => array('p01' => 'Puma One', 'p02' => 'Puma Two'),
      'Nike' => array('n01' => 'Nike One', 'n02' => 'Nike Two'),
      ...
    );
    

    如果你可以像这样直接格式化你的数组,你可以跳过第一步。

    然后遍历这个新数组并输出选项:

    foreach ($newOptions as $brand => $list) {
      echo "<optgroup label=\"$brand\">\n";
      foreach ($list as $code => $name)
        echo "<option value=\"$code\">$name</option>\n";
      echo "</optgroup>\n";
    }
    

    【讨论】:

    • 很好.. 看起来我需要创建新数组来跳过第一步。感谢您的信息。
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2020-08-14
    • 2023-04-02
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多