Autor Zpráva
Frank_
Profil *
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
Frank_ - tak si len vyťahaj posledné prvky z jednotlivých polí pomocou funkcie array_pop()
Frank_
Profil *
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()
a array_push(), ale stejně mi to ani neodstraní duplicitu.

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
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;
}
Frank_
Profil *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: