2013-10-03 5 views
0

У меня есть массив со значениямиМассив группировки Valus со счетом

Munnar, Cochin, Cochin, Cochin, Munnar, Cochin

, что нужно, чтобы сгруппировать значения, как

Munnar(1), Cochin(3), Munnar(1), Cochin(1).

Как можно закоротить массив, чтобы получить желаемый результат.

+4

Вы можете использовать array_count_values ​​(). Он даст вам массив – Pratik

+0

, он даст ответ вроде munnar (2), Cochin (4). Мне нужен результат точно, как указано выше –

ответ

4

Вы можете сделать что-то вроде этого:

<? 
$arrAux = array('Munnar', 'Cochin', 'Cochin', 'Cochin', 'Munnar', 'Cochin'); 

$count = 0; 
$previous = $arrAux[0]; 
foreach ($arrAux as $name){ 
    if ($previous === $name) 
    $count++; 
    else{ 
    echo "{$previous}({$count})"; 
    $previous = $name; 
    $count = 1; 
    } 
} 
//Print last item 
echo "{$previous}({$count})"; 
?> 

Это должно сделать работу, я думаю, что вы не хотите использовать array_count_values. Эта функция была выполнена через минуту, поэтому, возможно, ее можно улучшить :)

+0

У него уже есть массив :) Не нужно взорваться !! – Pratik

+0

Правильно, я отредактирую свой ответ, спасибо – Sal00m

+0

Это будет работать! –

0
//print_r(array_count_values($yourarray)); 

$array=array_count_values($yourarray); 

Теперь вы можете пройти через массив $, чтобы получить желаемый результат.

+1

Не совсем то, что пользователь просил .. – Chandresh

+0

@Chandresh Я предполагаю, что он запрашивает массив со счетчиком значений. –

+0

Нет, он просит подсчет последовательных значений, поэтому такой массив (Маннар, Кохин, Муннар, Кохин, Муннар, Кочин) напечатает «Муннар» (1), Кочин (1), Муннар (1), Кошинг (1), Муннар (1), Кочин (1) ' – Sal00m

0

попробовать этот

$array = array('Munnar','Cochin','Cochin','Cochin','Munnar','Cochin'); 
$vals = array_count_values($array); 
echo 'No. of NON Duplicate Items: '.count($vals).'<br><br>'; 

    foreach($vals as $key=>$val){ 
echo $key."(".$val."),"; 
} 

Выход:

Munnar(2),Cochin(4) 
+0

Я хочу, чтобы массив вроде [Муннар] => 1, [Кочин] => 3, [Муннар] => 1, [кочин] => 1 –

+0

ОК, пожалуйста wait @Nisanth –

+0

@Nisanth Вы хотите, чтобы Муннар (1), Кохин (3), Муннар (1), Кочин (1) этот выход или [Муннар] => 1, [Кочин] => 3, [Муннар] => 1 , [cochin] => 1 этот вывод, пожалуйста, объясните –

1

Тест

$arr = array('Munnar','Cochin','Cochin','Cochin','Munnar','Cochin'); 

$count = 0; 
$previous=$arr[0]; 
$output = ""; 
foreach($arr as $key=>$val) 
{ 
    if($arr[$key]==$previous){ 
     $count++; 
    } 
    else 
    { 
     $output .= $previous."(".$count.")"; 
    $count=1; 
    $previous= $arr[$key]; 
    } 
} 

if($previous==$arr[count($arr)-1]) 
    $output.=$previous."(".$count.")"; 


echo $output; 
+0

Эта функция будет считать дважды первый элемент и не покажет последний элемент, поэтому я печатаю последний элемент, когда 'foreach' заканчивается – Sal00m

+0

, это напечатает последний элемент :) – Pratik

+0

Да, отлично: D +1 – Sal00m

0

Я не знаю отлично PHP, но вы можете попробовать:

$array = array('Munnar','Cochin','Cochin','Cochin','Munnar','Cochin'); 

$prev = ""; 
$count = 0; 

foreach($array as $key) 
{ 
    if(empty($prev)) 
    { 
     $prev = $key; 
     $count = 1; 
     continue; 
    } 

    if($prev === $key) 
    { 
     $count++; 
    } else { 
     echo "($prev)($count)"; 
     $prev = $key; 
     $count = 1; 
    } 
} 

echo "($prev)($count)"; 
+0

, выдающий выход '() (0) (Муннар) (1) (Кочин) (3) (Муннар) (1) (Кочин) (1)', который не ожидается .. –

+0

Спасибо за подсказку, я отредактировал свой ответ –

0

Код:

<?php 
$key = ''; 
$_n = array(); 
$_a = array('Munnar', 'Cochin', 'Cochin', 'Cochin', 'Munnar', 'Cochin'); 
foreach ($_a as $_1) { 
    if ($key != $_1) { 
     $idx = count($_n[$_1]); 
     if (isset($_n[$_1][$idx])) $idx += 1; 
     $_n[$_1][$idx] = 1; 
     $key = $_1; 
    } 
    else { 
     $idx = count($_n[$_1]) -1; 
     $_n[$_1][$idx] += 1; 
    } 
} 


foreach ($_n as $k1=>$v1) { 
    foreach ($v1 as $k2=>$v2) { 
     echo 'Key: '.$k1.', Index:'.$k2.', Value:'.$_n[$k1][$k2].'<br/>'; 
    } 
} 
?> 

Результат

Key: Munnar Index:0 Value:1 
Key: Munnar Index:1 Value:1 
Key: Cochin Index:0 Value:3 
Key: Cochin Index:1 Value:1 

Если вам нужен точный порядок, как в вашем вопросе

Munnar(1), Cochin(3), Munnar(1), Cochin(1) 

Вы можете использовать выше и назначить на внутреннем контуре к новый массив примерно такой:

$new_arr[] = array($k1 => $_n[$k1][$k2]); 

Предостережение: убедитесь, что стартовый ключ всегда будет отличаться при первом сравнении.

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