Броене на еднакви стойности на масиви

teroristd

Registered
Здравейте, ето какво ме интересува. Създавам масив от случайно генерирани цели числа, 20 на брой, в обхват от 1 до 80.
Код:
$numbers = range(1, 80);
shuffle($numbers);
$numbers = array_slice($numbers, 0, 20);
След това ги записвам в база данни, като при всеки рефреш на страницата влизат по 20 числа, като всяко число е в отделен ред. Имам 21 реда като първия е id. Не пускам цялата заявка а само с две стойности за да добиете представа, че е много дълга.
Код:
$this->_databaseStatements->prepare('INSERT INTO numbers (num1, num2) VALUES(?,?)', array($numbers[0], $numbers[1]))->execute();
Така до тук всичко е ок. Целта ми е да броя всички стойности и да вадя съответния резултат. Например имам в базата 2 реда числа.
Ред1 - 2, 30, 45 и тн.
Ред2 - 7, 45, 27 и тн.

Трябва да извадя накрая нещо такова.
Числото 1 се среща 0 пъти.
Числото 45 се среща 2 пъти.
Така за всички числа от 1 до 80, като се има предвид че при всеки рефреш броят се увеличава. Един вид трябва да броя кое число колко пъти се среща в тази растяща поредица от числа.

Пробвах с array_count_values() и не става защото масива е двумерен.
Ето примерен масив, който пак съкращавам до две числа и два реда че е много дълъг.
Код:
Array ( [0] => Array ( [num1] => 36 [num2] => 46 ) [1] => Array ( [num1] => 21 [num2] => 51))
Някой има ли идея как може да стане?
 
lam3r4370 каза:
Два foreach-а и един масив където пазиш стойностите

Не те разбрах какво точно трябва да направя?
Ето два foreach-а и един масив. Как да броя?
Код:
foreach ($sql as $v) {
            foreach ($v as $r) {
                $arr = array();
                $arr[] = $r;
            }
        }
 
Може би нещо от рода.

Пиша на изуст.

PHP:
$queryResult = ...; // масива, който получава
$queryResult = array_values($queryResult);

$values = array();
for ( $i = 0; $i < sizeof($queryResult); $i++) {
        $splitValues = array_values($queryResult[$i]);
        for  ( $j = 0; $j < sizeof($splitValues); $j++) {
                $values[] = $splitValues[$j];
        }
}

print_r(array_count_values($values));


Ако получаваш по този начин масива, би трябвало да работи, но не съм го тествал.

П.П. Обичам да използвам for/while цикли понякога, вместо foreach, но това да не те притеснява. :D


ЕДИТ: http://sandbox.onlinephpfunctions.com/code/8321f0cceba7f2b816f87e1e20654b9476b1056b

Ето тука можеш да го изпълниш за проба.
 
Revelation каза:
Може би нещо от рода.

Пиша на изуст.

PHP:
$queryResult = ...; // масива, който получава
$queryResult = array_values($queryResult);

$values = array();
for ( $i = 0; $i < sizeof($queryResult); $i++) {
        $splitValues = array_values($queryResult[$i]);
        for  ( $j = 0; $j < sizeof($splitValues); $j++) {
                $values[] = $splitValues[$j];
        }
}

print_r(array_count_values($values));


Ако получаваш по този начин масива, би трябвало да работи, но не съм го тествал.

П.П. Обичам да използвам for/while цикли понякога, вместо foreach, но това да не те притеснява. :D


ЕДИТ: http://sandbox.onlinephpfunctions.com/code/8321f0cceba7f2b816f87e1e20654b9476b1056b

Ето тука можеш да го изпълниш за проба.

Евала колега, получи се идеално. Не ме притесняват for/while цикли, ако знаеш аз какви ги въртях и не ми се получаваше :D .
Мерси много, жив и здрав да си.
 
Код:
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
$count = array_count_values(iterator_to_array($it, false));

Код:
$result = array_reduce($arr, 'array_merge', array());
$count = array_count_values($result);
 

Back
Горе