2015-08-16 4 views
0

Я хочу извлечь количество каждого разделенного запятой слова из следующего массива. Пробовал несколько функций (рекурсивный/нерекурсивный), но ничего не работает.Экстракт подсчета каждого разделенного запятой массива word

array_count_values ​​ функция дает комбинированное количество всех ключей как 3 только тогда, когда оно должно давать результат 3 для каждого слова, поскольку все 3 подматрицы одинаковы.

Actual Массив

Array 
(
    [0] => Bangalore, Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur 
    [1] => Bangalore, Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur 
    [2] => Bangalore, Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur 
) 

This Link, кажется, довольно близко & давая следующий выходной

Array 
(
    [Bangalore] => 1 
    [Chennai] => 1 
    [Delhi] => 1 
    [Gurgaon] => 1 
    [Hyderabad] => 1 
    [Kolkata] => 1 
    [Mumbai/Navi Mumbai] => 1 
    [Noida] => 1 
    [Guntur] => 1 
) 

Требуемая мощность

Array 
(
    [Bangalore] => 3 
    [Chennai] => 3 
    [Delhi] => 3 
    [Gurgaon] => 3 
    [Hyderabad] => 3 
    [Kolkata] => 3 
    [Mumbai/Navi Mumbai] => 3 
    [Noida] => 3 
    [Guntur] => 3 
) 

Я знаю, что я очень близок к требуемому результату, но не могу его исправить.

ответ

0

не удержалась придумывая однострочника ;-)

$input = array(
    'foo, bar, baz', 
    'foo, bar', 
    'foo', 
); 

$output = array_count_values(call_user_func_array('array_merge', array_map(function($v) { return explode(', ', $v); }, $input))); 

Который производит:

Array 
(
    [foo] => 3 
    [bar] => 2 
    [baz] => 1 
) 
1

Попробуйте использовать array_merge(), затем array_count_values().

Если линии массива:

$arr[] = array("Bangalore", "Chennai", "Delhi", "Gurgaon", "Hyderabad", "Kolkata", "Mumbai/Navi Mumbai", "Noida", "Guntur"); 
$arr[] = array("Bangalore", "Chennai", "Delhi", "Gurgaon", "Hyderabad", "Kolkata", "Mumbai/Navi Mumbai", "Noida", "Guntur"); 
$arr[] = array("Bangalore", "Chennai", "Delhi", "Gurgaon", "Hyderabad", "Kolkata", "Mumbai/Navi Mumbai", "Noida", "Guntur"); 

$comp = array(); 
foreach($arr as $vals) { 
    $comp = array_merge($vals,$comp); 
} 

print_r(array_count_values($comp)); 

Если ваши линии строки, вам нужно explode(), а также:

<?php 
$arr[] = "Bangalore,Chennai,Delhi,Gurgaon,Hyderabad,Kolkata,Mumbai/Navi Mumbai,Noida,Guntur"; 
$arr[] = "Bangalore,Chennai,Delhi,Gurgaon,Hyderabad,Kolkata,Mumbai/Navi Mumbai,Noida,Guntur"; 
$arr[] = "Bangalore,Chennai,Delhi,Gurgaon,Hyderabad,Kolkata,Mumbai/Navi Mumbai,Noida,Guntur"; 

$comp = array(); 
foreach($arr as $vals) { 
     $new = explode(",",$vals); 
     $comp = array_merge($new,$comp); 
    } 

print_r(array_count_values($comp)); 
?> 

Дает:

Array 
(
    [Bangalore] => 3 
    [Chennai] => 3 
    [Delhi] => 3 
    [Gurgaon] => 3 
    [Hyderabad] => 3 
    [Kolkata] => 3 
    [Mumbai/Navi Mumbai] => 3 
    [Noida] => 3 
    [Guntur] => 3 
) 
+0

Благодаря lafor. Он работал как шарм. Большое спасибо. Хотя все остальные ответы также работали, но у вас есть простой один лайнер :-) Спасибо Herny & Rasclatt, а также за то, что они щадили свое время :-) –

0
<?php 

function soFnc($pcs,$arrResult) { 
    foreach($pcs AS $val) { 
     $val = trim($val); 
     if(isset($arrResult[$val])) 
      $arrResult[$val]++; 
     else 
      $arrResult[$val]=1; 
    } 
    return $arrResult; 
} 

$arr = array(); 
$arr[] = 'Bangalore, Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur'; 
$arr[] = 'Bangalore, Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur'; 
$arr[] = 'Chennai, Delhi, Gurgaon, Hyderabad, Kolkata, Mumbai/Navi Mumbai, Noida, Guntur'; 

foreach($arr AS $item) 
{ 

    if(!isset($arrResult)) 
     $arrResult=array(); 

    $pices = explode(",",$item); 
    $arrResult = soFnc($pices,$arrResult); 
} 


echo "<pre>"; print_r($arrResult); echo "</pre>"; 
Смежные вопросы