2015-11-06 93 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