COUNTING ARRAY ELEMENTS IN PHP
Обръщам се за помощ за решението на PHP на следния проблем. Имаме масив от букви 'a', 'b', 'c'; 'a' се повтаря веднъж,
'b' - два пъти, 'c' - три пъти. Трябва да се направи друг масив, всъщност матрица от асоциативни масиви, всички с по 2 еднакви
ключа - 'letter' и 'count', като стойностите на 'letter' е всяка една от буквите , а на 'count' - броя на повторение на буквата
(самите букви не се сортират, нито се махат повтарящите се букви)
вход - ['c','a','c','b','b','c']
изход - [ ['letter'=>'c','count'=>3],['letter'=>'a','count'=>1],['letter'=>'c','count'=>3],
['letter'=>'b','count'=>2],['letter'=>'b','count'=>2],['letter'=>'c','count'=>3] ]
Опитах се да реша задачата на JS и PHP. Решението на JS работи, но не и това на PHP(cli), въпреки че логиката е същата.
По някаква причина броенето не се задейстна и на всеки 'count' стои 0, а не мога да разбера защо.
JS:
let arr = ['c','a','c','b','b','c']
let res = []
for(let letter of arr){
let obj = {}
obj.letter = letter
obj.count = 0
res.push(obj)
let count = res.filter(function(a){return a.letter == letter})
for(let r of res){
if(r.letter == letter){
r.count = count
}
}
}
console.log(res)
PHP:
<?php
$arr = ['c','a','c','b','b','c'];
$res = [];
foreach($arr as $letter){
$assocArr = [];
$assocArr['letter'] = $letter;
$assocArr['count'] = 0;
array_push($res,$assocArr);
$count = count( array_filter($res, function($a){return $a['letter'] == $GLOBALS['letter'];}) );
foreach($res as $r){
if($r['letter'] == $letter){
$r['count'] = $count;
}
}
}
var_dump($res);
Ами условието е съвсем просто, даже може още да се опрости. Ако имаш масив от латински букви, които може и да се повтарят,
как към всяка буква да се долепи числото, което е броят на повторенията на буквата в масива, например от[ 'b', 'a', 'b'] да
се получи [ 'b2', 'a1', 'b2' ], защото 'b' се повтаря 2 пъти, а 'a' не се повтаря, т.е.1.
В условието вчера бях написал, че трябва за всяка буква да се направи асоциативен масив с два елемента с ключове 'letter' и
'count', като 'letter' е самата буква, а 'count' е колко пъти тя се повтаря, т.е. вместо [ 'b2', 'a1', 'b2' ] да се получи
[ ['letter'=>'b','count'=>2], ['letter'=>'a', 'count'=>1], ['letter'=>'b','count'=>2] ]. Но в случая това са подробности.
Същината на въпроса ми е защо моя опит за решение, който съм дал на езика PHP, не работи и дава резултат [ 'b0', 'a0', 'b0' ],
т.е. по някаква причина броенето изобщо не се задейства.