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

то, что мне нужно, это подсчет общих массивов подобные значения как Доплера (Arm Артерии) = 2 ...

+0

Покажите нам, что вы пробовали. - Почему ваши собственные попытки не работали/какие ошибки вы получили? – Epodax

+0

вопрос обновлен, пожалуйста, проверьте –

+2

Thats HORRIBLE способ кодирования 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

oops this is same my code только с новой переменной. Спасибо samir, но мне нужен результат в переменных. пожалуйста, направляйте дальше, чтобы я принял ваш ответ. –

+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' хранит то, что подразумевает название, - элемент singluar. ;-) – VolkerK

+0

Согласен.Нормализация базы данных всегда должна быть предпочтительной :) – Samir

Смежные вопросы