Autor | Zpráva | ||
---|---|---|---|
Frank_ Profil * |
#1 · Zasláno: 19. 4. 2009, 17:03:56
Zdravim, můžete mi někdo poradit s následujícím problémem?
Mám objekt, který se skládá z polí se stejnou strukturou. Potřebuju z tohoto objektu odstranit duplicitní "řádky", ale je v tom háček. Pole jsou duplicitní kromě jedné posledního hodnoty. Já potřebuji odstranit duplikát a hodnoty posledního prvku pole sečíst (odstarněného prvku + prvku, který zůstává). Zatím požívám tuto fci: function arrayOfArrays($arrayOfArrays) { foreach ($arrayOfArrays as $key=>$value) { $arrayOfArrays[$key] = "'" . serialize($value) . "'"; } $arrayOfArrays = array_unique($arrayOfArrays); foreach ($arrayOfArrays as $key=>$value) { $arrayOfArrays[$key] = unserialize(trim($value, "'")); } return $arrayOfArrays; } Ta však odstraní pouze přesné duplikáty, tedy i se shodným posledním prvkem. Poradíte někdo, jak by funkce vypadala, když chci odstranit i stejné řádky krom posledního prvku a hodnoty posledních prvků sečíst? Předem mockrát děkuji. |
||
tiso Profil |
#2 · Zasláno: 19. 4. 2009, 17:23:00
Frank_ - tak si len vyťahaj posledné prvky z jednotlivých polí pomocou funkcie array_pop()
|
||
Frank_ Profil * |
#3 · Zasláno: 20. 4. 2009, 16:34:13
Děkuju za odpověď. Tahle funkce se docela hodí, ale stejně mě to dostatečně nenakoplo :-)
Mám objekt: Array ([0] => Array([ovoce] => banan [pocet] => 5) [1] => Array([ovoce] => jablko [pocet] => 2) [2] => Array([ovoce] => banan [pocet] => 1) [3] => Array([ovoce] => pomeranc [pocet] => 3) ) Výstup z funkce by měl vypadat takto: Array ([0] => Array([ovoce] => banan [pocet] => 6) [1] => Array([ovoce] => jablko [pocet] => 2) [2] => Array([ovoce] => pomeranc [pocet] => 3) ) Netušim jak toho z výše vypsané funkce dosáhnout. Ta mi neodstraní duplicitní banan právě proto, že celé řádky se neshodují. Přidal jsem tam funkci array_pop() function arrayOfArrays($arrayOfArrays) { foreach ($arrayOfArrays as $key=>$value) { $pocet_ = array_pop($arrayOfArrays[$key]); // array_pop($arrayOfArrays[$key]); // echo $pocet_;///// // print_r( $arrayOfArrays[$key])."<br/>";///// $arrayOfArrays[$key] = "'" . serialize($value) . "'"; //echo $arrayOfArrays[$key]; } $arrayOfArrays = array_unique($arrayOfArrays); foreach ($arrayOfArrays as $key=>$value) { $arrayOfArrays[$key] = unserialize(trim($value, "'")); //array_push($arrayOfArrays[$key],"pocet => ".$pocet_); $arrayOfArrays[$key]['pocet'] = $arrayOfArrays[$key]['pocet'] + $pocet_; } return $arrayOfArrays; } Zjistil jsem, že po serialize() je to pole v řetězcí, ale na konci ten počet obsahuje... Jak řešit ten součet počtů už fakt vůbec netušim. Budu vděčnej, pokud byste si s tím někdo zkusil pohrát. Předem díky moc... |
||
tiso Profil |
#4 · Zasláno: 20. 4. 2009, 17:31:27
Frank_ - ak to má byť nejaký košík v eshope, tak ideš na to zle, tú session by si mal mať priamo v tvare [id_tovaru] => [pocet_kusov], keď dáš zmeniť počet, tak aktualizuješ počet. Prečítaj si http://php.vrana.cz/nakupni-kosik.php
Ak stále trváš na svojom pôvodnom riešení tak takto: function arrayOfArrays($arrayOfArrays) { $keys=array();//pomocne pole foreach($arrayOfArrays as $key => $val){ foreach($val as $key2 => $val2){break;}//ziskame key a val prveho prvku if (isset($keys[$key2.$val2])){ $arrayOfArrays[$keys[$key2.$val2]]['pocet']+=$val['pocet']; unset($arrayOfArrays[$key]); } else{$keys[$key2.$val2]=$key;} } unset($keys); return $arrayOfArrays; } |
||
Časová prodleva: 7 dní
|
|||
Frank_ Profil * |
#5 · Zasláno: 27. 4. 2009, 15:41:12
Díky moc, je to přesně ono... Nejedná se o košík v e-shopu, ale o třídění a seřazení výsledku několika spojených resultů z mysql.
|
||
Časová prodleva: 15 let
|
0