Indexi valorilor din array care fac suma
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
sterica
- Mesaje:285
Indexi valorilor din array care fac suma
Salutare,
am un array cu urmatoarele numere:
si o variabila, care poate contine numere intregi de la 50 pana 750 (750 este suma tuturor numerelor din array), iar valoarea sa fie divizibila cu 50
cum pot insuma numerele din array si sa returnez cheile numerelor implicate in calcul, ma intereseaza doar prima varianta care duce la egalitatea cu variabila 300
Multumesc!
MarPlo
Mesaje:4343
Salut,
Care este rolul acelei variabile, ce trebuie sa faca (number=300) in acea ecuatie, in calcularea sumei?
In functie de ce anume se stabilesc cheile si suma?
sterica
Mesaje:285
Variabila number stochează numărul introdus de user, numărul pe care îl introduce poate fi cuprins între 50 și 750
50 este minimul
750 este suma maxima a tuturor valorilor din array
de asemena numărul pe care îl introduce va fi divizibil cu 50
Sa presupunem ca userul introduce valoarea 400
Trebuie sa returnez cheile arrayului care formează suma de 400, cum ar fi: 100+100+200 sau 200+200.
Ma interesează doar o varianta, varianta pe care o găsește algoritmul prima
MarPlo
Mesaje:4343
Inceardca codul urmator. La test va afisa un array cu indexi tuturor combinatiilor /permutarilor de valori din array ($arr) care fac acea suma ($sum).
Variabila $first_re contine indexi primei combinatii.
Cod: Selectaţi tot
/**
* gets all possible permutations of $array
* @param array $array
* @param array $permutations
* @return array
*/
function permutations($array, $permutations =[]) {
if( !empty($array) ) {
$result = [];
for( $i = count($array) - 1; $i >= 0; --$i ) {
$newItems = $array;
$newPerms = $permutations;
list($values) = array_splice($newItems, $i, 1);
array_unshift($newPerms, $values);
$result = array_merge($result, permutations($newItems, $newPerms));
}
}
else $result = array($permutations);
return $result;
}
/**
* Returns all possible key combinations of $array with a sum equal $maxSum
* @param array $array
* @param integer $maxSum
* @return array
*/
function combinations($array, $maxSum) {
// get all permutations of the array keys
$permutations = permutations(array_keys($array));
$combinations =[];
// loop all permutations
foreach( $permutations as $keys ) {
// create a container for each permutation to store calculation
$c_keys =[];
$c_sum =0;
// now loop through the permutation keys
foreach( $keys as $key ) {
// if the addition is still between or equal $maxSum
if( ($c_sum + $array[$key]) <= $maxSum ) {
// increment the sum and add key to result
$c_sum += $array[$key];
$c_keys[] = $key;
}
}
if($c_sum < $maxSum) continue;
// to be sure each combination only exists once in the result
// order the keys and use them as array index
sort($c_keys);
$combinations[join($c_keys)] = $c_keys;
// if($c_sum == $maxSum) break; //Uncoment to return just first result
}
// remove the created key-index from array when finished
return array_values($combinations);
}
$arr =[50, 100, 100, 100, 200, 200];
$sum = 400;
$keys = combinations($arr, $sum);
$first_re = $keys[0]; // keys of the first result
// Output array with results
echo '<pre>';
var_export($keys);
sterica
Mesaje:285
Mulțumesc mult marplo, este ceea ce îmi trebuie
Subiecte similare
- Trei lucruri tampite care s-au intamplat la o gradina zoologica.
Divertisment si Jocuri
Stef va prezinta un articol despre trei evenimente chiar tampite care s-au intamplat la diferite gradini zoologice.
Ui3E3aPtqTc
- Setare valori din array in select tag
JavaScript - jQuery - Ajax
Primul mesaj
Salut am un array cu orele de functionare
$data = array (
'0400' => '04:00 AM',
'0430' => '04:30 AM',
'0500' => '05:00 AM',
'0530'...
Ultimul mesaj
Testeaza urmatorul cod.
Daca ceva mai trebuie schimbat, incearca si tu sa modifici dupa cum stii, in functie de ce vrei sa obtii.
Open:...
- parametru din array in query cu laravel
PHP - MySQL - XML
Primul mesaj
Salutare,
din frontend primesc urmatorul array:
$arrClienti =
dupa care ii fac implode
$idClienti = preg_replace('/ /i', '', implode( , ,...
Ultimul mesaj
Dupa multe sapaturi, am ajuns la concluzia ca nu se poate rula ca parametru o matrice. Doar daca parametrul cu matricea este rulat intr-un loop....
- implode(): Passing glue string after array is deprecated
PHP - MySQL - XML
Primul mesaj
Dupa 7 ani !
Acum, revazand o veche aplicatie cu codul Multiple Select Drop Down list cu tabel 3 coloane +1; am constatat ca datorita upgradarii...
Ultimul mesaj
OK ! Eu nu am inteles despre ce parametri era vorba. S-a rezolvat, multumesc pentru promptitudinea cu care mi-ai raspuns ! TOATE CELE BUNE !!!