【问题标题】:Remove or hide duplicates values in a variable删除或隐藏变量中的重复值
【发布时间】:2018-09-10 23:04:35
【问题描述】:

我有一个从数据库调用数据的变量:

for($i = 0; $i < count($consultaReporte); $i++)
            {       
                    $a= $consultaReporte[$i]['FIELD'];                          

            }

我在一个 html 表中打印这个变量,我得到:

  1. 史密斯
  2. 史密斯
  3. 史密斯
  4. 凯蒂
  5. 凯蒂
  6. 乔恩
  7. 迈克尔

如何隐藏或删除重复的名称?

我想要类似的东西:

  1. 史密斯
  2. 凯蒂
  3. 乔恩
  4. 迈克尔

First SolutionSecond Solution

【问题讨论】:

标签: php


【解决方案1】:

您可以将它们存储在地图中,然后获取地图键(地图没有存储重复键)

$a = array();
for($i = 0; $i < count($consultaReporte); $i++)
{        
      $a[$consultaReporte[$i]] = '';                          
}
print_r( array_keys($a) );

【讨论】:

    【解决方案2】:

    foreach() 最干净的方式

    $temp = [];
    
    foreach ($consultaReporte as $reporte) {
        if (! in_array($field = $reporte['FIELD'], $temp)) {
            $temp[] = $field;
        }
    }
    
    // Return the result
    return $temp;
    

    【讨论】:

    • 我得到了“数组”这个词作为返回
    • 尝试回显 $field 值:$temp = []; foreach ($consultaReporte as $reporte) { if (!in_array($field = $reporte['FIELD'], $temp)) { echo $field; } }
    【解决方案3】:

    你可以通过保护填充临时数组来使用它

     $arrTemp = array();
    
     foreach ($consultaReporte as $curr) { 
          if (!in_array($curr['FIELD'], $arrTemp)) {
             $arrTemp[] = $curr['FIELD'];
          }
     }
    
      foreach($arrTemp as $currValue){
        echo $currValue;
     }
    

    示例:

    $consultaReporte = array("a", "b", "b");
        $arrTemp = array();
            foreach ($consultaReporte as $curr) { 
                 if (!in_array($curr, $arrTemp)) {
                    $arrTemp[] = $curr;
                 }
            }
         foreach($arrTemp as $currValue){
             echo $currValue . '-';
         }
    

    结果

    【讨论】:

    • 它返回一个空值
    • 什么是 $a ?因为我想念它,我的意思是如果你打印 $a ,你可以从数组本身打印
    • 我又编辑了你可以选择,我看不出你到底做了什么$a
    • 因为要打印数组,您可以使用 print_r($array) 或我之前展示的 foreach '
    • 由于某种原因我仍然得到重复值
    【解决方案4】:

    这就是我解决自己问题的方法:

    for($i = 0; $i < count($consultaReporte); $i++)
                {                           
                    $employeeId = $consultaReporte[$i]['ID_EMPLOYEE'];
                    $employeeName = $consultaReporte[$i]['FIELD'];                                      
    
                    if($employeeId == $consultaReporte[$i-1]['ID_EMPLOYEE'])
                    {                       
                        $employeeName = '';                                             
                    }           
    
                        $this->cuerpoReporte.= '<tr class="">                           
                                    <td width="90" align="left" valign="top" border="0">&nbsp;'.wordwrap(strtoupper(''.$employeeName), 20, "<br />",1).'</td>                                                       
                                </tr>';
                }
    

    它给了我预期的结果。尽管如此,我很确定这不是这样做的最佳方式,所以如果这里有人知道如何优化此代码,甚至是给出相同结果的新代码,我将不胜感激分享它。

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2019-01-02
      • 1970-01-01
      • 2020-04-10
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多