【问题标题】:Loop extra value after array is sorted and mapped on current数组排序并映射到当前值后循环额外值
【发布时间】:2017-03-05 23:55:18
【问题描述】:

我有一个按字母顺序排序的列表。为此,我使用以下方法确保数组中只有名称:

$oned = array_map('current', $productencr);

然后我将它们全部排序:

sort($oned, SORT_STRING | SORT_FLAG_CASE);

我的问题:

我还需要在循环中显示属于每个名称的描述。我怎样才能做到这一点并且仍然让我的名称数组一维并排序?

<?
//  Product names
    $producten                  = "SELECT producten.naam, producten.id, producten.omschr_kort FROM `producten` WHERE special = ''";
    $productencon               = $conn->query($producten);
    $productencr                = array();
    while ($productencr[] = $productencon->fetch_assoc());
    // Maak van de multidimensionale array een ééndimensionale
    $oned = array_map('current', $productencr);
    $lastChar = '';
    // Sorteer de array op alfabetische volgorde
    sort($oned, SORT_STRING | SORT_FLAG_CASE);

    $i = 1;
    // Loop de array
    foreach($oned as $key => $val){
      //De eerste waarde is leeg dus voor de code pas uit als key nummer is niet 0
      if($key != '0'){
        echo '<li class="tooltipproduct" data-tooltip-content="1">';
        $char = $val[0];
        if($char !== $lastChar){
          if($lastChar !== ''){
            echo '<br>';
          }
          echo '<span style="color:#eb9600;font-size:25px;font-weight:800;">'.strtoupper($char).'</span><br>';
          $lastChar = $char;
        }
        echo '<span class="tooltip1" data-tooltip-content="#tooltip_content'.$i.'" style="cursor:pointer;">'.$val.'</span><br></li>';
        echo '<div class="tooltip_templates" style="background-color:#eb9600;">
                  <span id="tooltip_content'.$i.'" style="min-height:180px;!important">
                      <h2 style="font-size: 20px;color:#fff;font-weight:bold;">'.$val.'</h2>
                      <span>Meer informatie nodig <br> of snel een scherpe offerte?</span>
                      <br>
                      <a style="position:absolute;bottom:20px;font-weight:bold;color:#fff;background-color:#c17c02;padding:10px;border-radius:3px;" href="contact.php">Vraag offerte aan</a>
                      <img style="max-width:90px;position:absolute;bottom:0px;right:12px;" src="images/contact_jess.png" /> <!-- assets/images/team/member-\'.rand(1,10).\'.png -->
                  </span>
              </div>';
        $i++;
      }
    }
?>

$val 将始终包含名称,因为数组 $oned 仅包含名称(因此我可以轻松地对它们进行排序)。我怎样才能在我的循环中使用另一个值? $oned 包含 ['naam'] 但我还需要 ['omschr_kort'] 循环。

也许我可以先对数组进行排序,然后将结果与另一个数组合并?

我当前的数组输出示例,选择了所有内容(不仅是名称):

    Array
(
    [0] => Array
        (
            [naam] => Naam1
            [id] => 1
            [omschr_kort] => Lorem ipsum
        )

    [1] => Array
        (
            [naam] => Naam2
            [id] => 2
            [omschr_kort] => Lorem ipsum
        )

    [2] => Array
        (
            [naam] => Naam3
            [id] => 3
            [omschr_kort] => Lorem ipsum
        )
)

【问题讨论】:

  • 为什么不使用二维数组并按第一列排序?

标签: php sql arrays sorting


【解决方案1】:

考虑到$productencr 是这样的:

$productencr = array(
    ['naam'=>'naam2','omschr_kort'=>'oms1'],
    ['naam'=>'naam1','omschr_kort'=>'oms2'],
    ['naam'=>'naam4','omschr_kort'=>'oms3'],
    ['naam'=>'naam3','omschr_kort'=>'oms4'],
);

您可以使用此脚本对其进行排序

$return_fare = [];
foreach ($productencr as $key => $row) {
    $return_fare[$key]  = $row['naam'];
}
$is_sorted = array_multisort($return_fare, SORT_ASC, $productencr);
print_r($productencr); // now $productencr is sorted with [naam] column

详情请见PHP sort array by two field values

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2012-03-31
    • 2023-01-19
    • 2015-04-12
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多