2015-01-13 107 views
-2

我有一个SQL数组,其中包含语言和数量有多少用户使用该语言。从数组中循环 - PHP

阵列的样子:

"$languages" => array (5) 
12 => "CZ" (2) 
4 => "SK" (2) 
3 => "DE" (2) 
2 => "RO" (2) 
6 => NULL 

正如你可以看到这个阵列恢复。我要让他们的统计,但它是一种我的问题,因为只有这样,我能得到这个值是写它的计数次数(这将改变OFC)

$langauges[12] - answer CZ 
$languages[CZ] - answer error 

是否有办法我怎么能让这个数组循环,让我们说回声一些HTML?

我要的是:

<div> 
<div class="country"> CZ </div> 
<div class="number"> 12 </div> 
</div> 

SQL的样子:

function getLanguageStatistic() 
{ 
    return $this->db->fetchPairs('SELECT COUNT(*), language FROM users GROUP BY language ORDER BY COUNT(language) DESC'); 
}  
+2

'的foreach($数组作为$ K => $ v)的' –

+0

' $ value){...}?>'$ key'将是12,'$ value'将是CZ。 ** 1个简单的问题如果两种语言具有相同的计数会发生什么???? ** – CodeBird

+0

我们可以看到SQL请求吗?我想我们可以在使用它之前做一些事情! – Spoke44

回答

3

在前,名行。

$request = $this->db->query("SELECT COUNT(*) as nbr 
            , language FROM users 
          GROUP BY language 
          ORDER BY COUNT(language) DESC"); 

然后(使用PDO,但同为他人):

$datas = $request->fetchAll(); 

foreach($datas as $elem){ 
    echo '<div> 
      <div class="country">'.$elem["language"].'</div> 
      <div class="number">'.$elem["nbr"].'</div> 
     </div>'; 
} 
+0

辐条,这真的开始有意义,不幸的是,如果我使用您的查询代码它,我的“$ datas”转储空白 'array(1) “$ languages”=> NULL' – Andurit

+0

@Andurit:你使用PDO ?因为,我用$ this-> db->查询,也许你有一个抽象层... – Spoke44

+0

我刚刚发现我没有叫这个$请求,所以在我的网站上失败(看起来我期待这个代码太长),无论如何,这是正确的答案。 非常感谢您的帮助 – Andurit

1

首先排序与asort()您的阵列塔做foreach

asort($languages); 

foreach ($language as $frq => $acronym): ?> 
    <div> 
     <div class="country"> <?php echo $acronym; ?> </div> 
     <div class="number"> <?php echo $frq; ?> </div> 
    </div> 
<?php endforeach; ?> 

但随着你的结构有缺陷:

AZ有12个用户
LT有12个用户

LT在阵列密钥中覆盖AZ。更好的使用结构:

$languages = [ 
    [ 
     'country' => 'AZ', 
     'number' => 12, 
    ], 
    [ 
     'country' => 'LT', 
     'number' => 12, 
    ], 
]; 
-2
Use a foreach loop to iterate through all the address, as seen below: 

foreach($blockIP as $ip) 
{ 
    if($_SERVER['REMOTE_ADDR'] == $ip){ 
     echo 'blocked'; 
    }else{ 
     echo 'not blocked'; 
    } 
} 
If you only need to check to see if the current address is in the array, use the in_array() function: 

if(in_array($_SERVER['REMOTE_ADDR'], $blockIP)){ 
    echo 'blocked'; 
}else{ 
    echo 'not blocked'; 
} 
+0

什么地址?你只是复制另一个问题的答案,并将其粘贴在这里? – CodeBird