如何在数组中检查数组中是否存在值,以及是否需要处理相应的数据


How to check in array whether value in array exist and if does take the corresponding data to process

我一直在对数组进行排序,以取出唯一值并将相关值处理为累积值。

源代码:

while($row1 = mysql_fetch_array($result1))
{ 
$row1[8] = $row1[8] / 60;
 echo    "<tr>".
         "<td>".$row1[0]           . "</td>".
         "<td>".$row1[1]           . "</td>".
         "<td>".$row1[2]           . "</td>".
         "<td>".$row1[3]           . "</td>".        
         "<td>".$row1[4]           . "</td>".
         "<td>".$row1[5]           . "</td>".
         "<td>".$row1[6]           . "</td>".
         "<td>".$row1[7]           . "</td>".
         "<td>".$row1[8]           . "</td>".
         "<td>".$row1[9]           . "</td>";
         $counters = array();
         $counters[$row1[9]] += $row1[8];
         arsort($counters);
        var_dump($counters);

var转储如下:

array(1) { ["derek"]=> int(2) } 
array(1) { ["garyhui"]=> float(0.5) } 
array(1) { ["nikole"]=> int(1) } 
array(1) { ["tony"]=> int(4) } 
array(1) { ["tony"]=> int(2) } 
array(1) { ["tony"]=> float(3.5) } 
array(1) { ["tony"]=> float(2.5) }

我需要的最终结果是smth类似

Derek : 2
Garyhui : 0.5
Nikole : 1

托尼:12<--请注意,这个数字能够根据以前的数组索引关联自行累积。感谢您的帮助!

使用array_key_exists()检查现有键值:

#like @Erik said, place this out of while loop,
#keeping it inside while makes it empty in every loop
$counters = array();
while($row1 = mysql_fetch_array($result1))
{ 
  /*
     Your echo code here
  */
  if(array_key_exists($row1[9],$counters)){
     #if exists, accumulate value of current key
     $counters[$row1[9]] += $row1[8];
  }
  else
  {
     #if does not exist, create new key
     $counters[$row1[9]] = $row1[8]; 
  }
} 

您一直在将$counters重新定义为空数组,因为您一直在循环中执行$counters = array()。这就是为什么它们加不起来的原因。您必须删除这一行代码,并将其移动到循环上方的某个位置。就像这样:

$counters = array();
while($row1 = mysql_fetch_array($result1))
{ 
    $row1[8] = $row1[8] / 60;
     echo    "<tr>".
     "<td>".$row1[0]           . "</td>".
     "<td>".$row1[1]           . "</td>".
     "<td>".$row1[2]           . "</td>".
     "<td>".$row1[3]           . "</td>".        
     "<td>".$row1[4]           . "</td>".
     "<td>".$row1[5]           . "</td>".
     "<td>".$row1[6]           . "</td>".
     "<td>".$row1[7]           . "</td>".
     "<td>".$row1[8]           . "</td>".
     "<td>".$row1[9]           . "</td>";
     $counters[$row1[9]] += $row1[8];
     arsort($counters);
    var_dump($counters);