2015-11-06 51 views
0

这是我的数据库表如何从PHP中的多维数组中获取相同值的计数?

enter image description here

我正在爆炸的这些值这样

<?php 
    $i =0; 
    foreach($appointment as $app_book){ 
     $arr[$i] = explode(",",$app_book['type_of_ultra_sound']); 
     $i++; 
    } 
    echo "<pre>"; 
    print_r($arr); 
    echo "</pre>"; 
?> 

输出是这

enter image description here

我想这

$occurences = array_count_values($items); 
print_r($occurences); 

我也试过,但没有帮助 enter link description here

我需要的是整个阵列的数量像 多普勒(臂动脉)= 2 ...相似的价值观

+0

向我们展示你已经尝试了什么。 - 为什么没有你自己的尝试工作/你有什么错误? – Epodax

+0

问题更新请检查 –

+2

这是一种编码PHP的可怕方法。您只需在必要时启动和停止PHP解释器。不在代码的每一行 – RiggsFolly

回答

1

可以存储在数组中值逐个而不是创建多维数组。

<?php 
$i =0; 
$arr = array(); 
foreach($appointment as $app_book) { 
    $exp = explode(",",$app_book['type_of_ultra_sound']); 
    foreach($exp as $v) 
    { 
     $arr[$i] = $v; 
     $i++; 
    } 
} 
echo '<pre>'; 
print_r($arr); 
echo '</pre>'; 

$occurences = array_count_values($arr); 
print_r($occurences); 

foreach($occurences as $keys => $values){ 
echo $keys ." ". $values ."<br>"; 
} 

?> 
+0

哎呀,这是我的代码只是与新变量相同。谢谢萨米尔,但我需要变量的结果。请进一步指导,所以我接受你的答案,谢谢。 –

+0

所以你只需要计算特定的值。对于e,g。多普勒(手臂动脉)= 2? – Samir

+0

谢谢我编辑你的答案并添加了我的要求。谢啦。 –

1
$values = []; 
foreach($array as $s) { 
    foreach($s as $ss) { 
     if (!isset($values[$ss])) { 
      $values[$ss]= 0; 
     } 
     $values[$ss]++; 
    } 
} 
+1

在你的if子句中缺少一个')'; – Epodax

+0

@Epodax感谢您的支持! – Amarnasan

0

一个简单的嵌套循环就足够你的情况:

// $arr is your array 
$counts = array(); 
foreach($arr as $suba) { 
    foreach($suba as $doppler) { 
     (isset($counts[$doppler])) || $counts[$doppler] = 0; 
     $counts[$doppler] += 1; 
    } 
} 

实施例运行:

[25] boris> $arr; 
// array(
// 0 => array(
//  0 => 'doppler a', 
//  1 => 'doppler b' 
// ), 
// 1 => array(
//  0 => 'doppler c', 
//  1 => 'doppler b' 
// ), 
// 2 => array(
//  0 => 'doppler a', 
//  1 => 'doppler b', 
//  2 => 'doppler c', 
//  3 => 'doppler d' 
// ) 
//) 
[26] boris> $counts = array(); 
// array(
// 
//) 
[27] boris> foreach($arr as $suba) { 
[27]  *>  foreach($suba as $doppler) { 
[27]  *>   (isset($counts[$doppler])) || $counts[$doppler] = 0; 
[27]  *>   $counts[$doppler] += 1; 
[27]  *>  } 
[27]  *> } 
[28] boris> $counts; 
// array(
// 'doppler a' => 2, 
// 'doppler b' => 3, 
// 'doppler c' => 2, 
// 'doppler d' => 1 
//) 
[29] boris> 
0

除非您需要单独的“组”,否则可以将该阵列展平。与

$usounds = []; 
foreach($appointment as $app_book) { 
    $usounds = array_merge(
     $usounds, 
     explode(',', $app_book['type_of_ultra_sound']) 
    ); 
} 

,然后你可以使用array_count_values

自足例如:

<?php 
$appointment = [ 
    [ 'type_of_ultra_sound'=>'Doppler (Arm Ateries),Doppler (Both Limbs)' ], 
    [ 'type_of_ultra_sound'=>'Doppler (Arm Veins),Doppler (Liver)' ], 
    [ 'type_of_ultra_sound'=>'Doppler (Arm Ateries),Doppler (Arm Veins),Doppler (Both Legs),Doppler (Both Limbs)' ] 
]; 
$usounds = []; 
foreach($appointment as $app_book) { 
    $usounds = array_merge(
     $usounds, 
     explode(',', $app_book['type_of_ultra_sound']) 
    ); 
} 

var_export(array_count_values($usounds)); 

打印

array (
    'Doppler (Arm Ateries)' => 2, 
    'Doppler (Both Limbs)' => 2, 
    'Doppler (Arm Veins)' => 2, 
    'Doppler (Liver)' => 1, 
    'Doppler (Both Legs)' => 1, 
) 
+0

'array_merge'是一个很好的解决方案,但在大数组情况下会对性能产生影响,因为每次它都会保持数组的合并值。 – Samir

+0

在达到数组大小之前,我认为数据库应该重新构造,以便'type_of_ultra_sound'存储名称所暗示的内容 - 单个项目。 ;-) – VolkerK

+0

同意。规范化数据库应该始终是首选:) – Samir