【问题标题】:Loop to create option data in php循环在php中创建选项数据
【发布时间】:2018-01-11 03:37:30
【问题描述】:

数据

    Array
        (
            [0] => Array
                (
                    [name] => USPS First Class Package (2 To 3 business days)
                    [value] => USPSFirstClass
                    [category] => STANDARD
                )

            [1] => Array
                (
                    [name] => USPS Priority Mail (1 To 3 business days)
                    [value] => USPSPriority
                    [category] => EXPEDITED
                )

            [2] => Array
                (
                   [name] => FedEx Ground or FedEx Home Delivery (1 To 5 
 business days)
                   [value] => FedExHomeDelivery
                   [category] => STANDARD
        )

            [3] => Array
              (
                  [name] => UPS Ground (1 To 5 business days)
                  [value] => UPSGround
                  [category] => EXPEDITED
              )

        )

问题:我想将上面的数据循环为带有 optgroup 标签的下拉列表。下拉数据将显示为

标准

USPS 头等舱包裹(2 到 3 个工作日)

FedEx Ground 或 FedEx Home Delivery(1 至 5 工作日)

加急

USPS 优先邮件(1 到 3 个工作日)

UPS 陆运(1 到 5 个工作日)

我该怎么做:(

【问题讨论】:

标签: php


【解决方案1】:

您可以执行以下操作:

<?php

$data = array(
    array(
        'name' => 'USPS First Class Package (2 To 3 business days)',
        'value' => 'USPSFirstClass',
        'category' => 'STANDARD'
    ),
    array(
        'name' => 'USPS Priority Mail (1 To 3 business days)',
        'value' => 'USPSPriority',
        'category' => 'EXPEDITED'
    ),
    array(
        'name' => 'FedEx Ground or FedEx Home Delivery (1 To 5 business days)',
        'value' => 'FedExHomeDelivery',
        'category' => 'STANDARD'
    ),
    array(
        'name' => 'UPS Ground (1 To 5 business days)',
        'value' => 'UPSGround',
        'category' => 'EXPEDITED'
    ),
);

将您的类别分类到一个数组中:

$sorted = array();
foreach ($data as $key => $value){
    $sorted[$value['category']][] = array($value['name'], $value['value']);
}

并循环遍历它:

echo "<select>";
foreach ($sorted as $key => $value){
    echo "<optgroup label='$key'>";
    foreach ($value as $v){
        echo "<option value='". $v[1]."'>". $v[0] ."</option>";
    }
    echo "</optgroup>";
}
echo "</select>";

?>

【讨论】:

    【解决方案2】:

    类似的东西

    <?php
    $data = [
        [
            'name' => 'USPS First Class Package (2 To 3 business days)',
            'value' => 'USPSFirstClass',
            'category' => 'STANDARD'
        ],
        [
            'name' => 'USPS Priority Mail (1 To 3 business days)',
            'value' => 'USPSPriority',
            'category' => 'EXPEDITED'
        ],
        [
            'name' => 'FedEx Ground or FedEx Home Delivery (1 To 5
     business days)',
            'value' => 'FedExHomeDelivery',
            'category' => 'STANDARD'
        ],
        [
            'name' => 'UPS Ground (1 To 5 business days)',
            'value' => 'UPSGround',
            'category' => 'EXPEDITED'
        ]
    ];
    
    function _group_by($array, $key)
    {
        $return = array();
        foreach ($array as $val) {
            $return[$val[$key]][] = $val;
        }
    
        return $return;
    }
    
    $result = _group_by($data, 'category');
    ?>
    
    <select>
        <?php foreach ($result as $key => $value): ?>
            <optgroup label="<?php echo $key ?>">
                <?php foreach ($value as $v): ?>
                    <option value="<?php echo $v['value'] ?>"><?php echo $v['name'] ?></option>
                <?php endforeach; ?>
            </optgroup>
        <?php endforeach; ?>
    </select>
    

    这个_group_by 函数根据你的键分离你的数组

    【讨论】:

      【解决方案3】:

      你也可以试试这个:

      1)为标准值和加急值创建数组

      $standard=array();
      $expedited=array();
      

      2)遍历你的数组

      foreach($array_1 as $k=>$v) {
          if($v['category'] == 'STANDARD'){
              array_push($standard,$v['name']);
          }
          if($v['category'] == 'EXPEDITED'){
              array_push($expedited,$v['name']);
          }
      }
      

      3)打印你需要的东西

      print("STANDARD");
      print nl2br("\n");
      foreach($standard as $s){
          print_r($s);
          print nl2br("\n");
      }
      
      print nl2br("\n");
      print("EXPEDITED");
      print nl2br("\n");
      foreach($expedited as $e){
          print($e);
          print nl2br("\n");
      }
      

      最终输出将是:

      STANDARD
      USPS First Class Package (2 To 3 business days)
      FedEx Ground or FedEx Home Delivery (1 To 5 )
      
      EXPEDITED
      USPS Priority Mail (1 To 3 business days)
      UPS Ground (1 To 5 business days)
      

      【讨论】:

        【解决方案4】:

        您可以使用array_multisort函数按类别对其进行排序

        然后循环。

        【讨论】:

          猜你喜欢
          • 2016-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-21
          • 2012-06-19
          • 2014-06-19
          • 2012-03-18
          • 1970-01-01
          相关资源
          最近更新 更多