Un errore curioso mi sta facendo impazzire:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 8388608 bytes) in /home/mhd-01/www.pizza-flash.it/htdocs/stuff/sumDoubleItems.php on line 18
a prescindere dal fatto che 8388608 bytes sono meno di 67108864, e giá per questo non capisco come si possa creare un errore simile, ma il codice che sto eseguendo é veramente molto molto semplice, e non capisco dove sta l'errore. Forse sono stato troppe ore davanti allo schermo e non vedo un ; o un $ mancante....
Ho cercato su google e tra gli altri che ho trovato che avevano il mio stesso problema, non sono riuscito a trovare chi l'abbia risolto, solo conversazioni lunghissime con domande su quante persone navigassero contemporaneamente sui loro forum, o su che versione di software vari stavano utilizzando.
Ho provato a inserire
codice:
ini_set('memory_limit', '16M');
come da diverse parti si consiglia, ma il risultato é stato ancora piú assurdo:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 32 bytes) in /home/mhd-01/www.pizza-flash.it/htdocs/stuff/sumDoubleItems.php on line 5
La funzione e la classe presenti in questo file che vi allego servono per smaltire le informazioni ridondanti in un cookie contenente oggetti di un carrello elettronico, salvati nella forma NUMEROx:NUMERO#; dove i due numeri rappresentano quantitá e id dell'oggetto.
Quando un utente scegliesse due volte lo stesso oggetto si produrrebbero due semistringhe riferenti allo stesso id, e con il mio codice sto cercando di sommare le quantitá e riprodurre la stessa stringa di partenza senza ripetizioni di id.
codice:
<?php
class order_from_string{
  public function __construct($order_str){
    $temp=explode(":", $order_str);

// le due seguenti espressioni estrapolano ID e QUANTITA dalla stringa del cookie in cui le informazioni sono salvate secondo la forma QUANTITA_1x:ID_1#;QUANTITA_2x:ID_2#;QUANTITA_3x:ID_3#;...ecc
    $this->amount=substr($temp[0],0,(strlen($temp[0])-1));
	$this->id=substr($temp[1],0,(strlen($temp[1])-1));
 }
  public $amount=0;
  public $id=0;
}

function sumDoubleItems($cookie_string){
	ini_set('memory_limit', '16M');        // riga aggiunta senza risultati apparenti
	$returnString="";
	$order_raw=explode(";", $cookie_string);
	$order=Array();

	for($i=0; i<count($order_raw); $i++){
		$order[$i]=new order_from_string($order_raw[$i]);
	}

	for($i=0; $i<count($order); $i++){
		for($j=0; $j<count($order); $j++){
			if($i!=$j && $order[$i]->id==$order[$j]->id){
				$tempAmount=$order[$i]->amount+$order[$j]->amount;
				$order[$i]->amount=$tempAmount;
				unset($order[$j]);
				$order=array_values($order);
			}
		}
	}

	foreach($order as $o)
		$returnString.=$o->amount."x:".$o->id."#;";

	return returnString;
}

?>
aggiungo per completezza che la funzione sumDoubleItems() é chiamata nel seguente modo
codice:
$sumDoubleItems($_COOKIE['cart_content']);
dove il cookie potrebbe contenere ad esempio la seguente stringa
codice:
1x:3#;12x:3#;44x:1#;33x:3#;
e l'obiettivo sarebbe precisamente di ottenere come output la seguente stringa da salvare nuovamente nel cookie
codice:
46x:3#;44x:1#;
Oggi con un po piu di lucidita ho riscritto un programma che emula le funzioni di questo qua sopra semplificandolo, e stranamente funziona alla perfezione!!! non riesco a trovare le differenze,... ecco il nuovo

codice:
<?php


setcookie("cart_content", "1x:3#;3x:3#;4x:3#;5x:9#;4x:2#;1x:3#;3x:3#;4x:3#;5x:9#;4x:2#;", time()+3600);

echo $_COOKIE["cart_content"];

// anziche utilizzare la classe order_from_string qui i valori vengono salvati in due array
$ids=Array();    // uno per gli ID
$ams=Array();  // uno per le QUANTITA

$raw=explode(";", $_COOKIE["cart_content"]);

for($k=0; $k<count($raw); $k++){
    $temp=explode(":", $raw[$k]);
    $ams[$k]=substr($temp[0],0,(strlen($temp[0])-1));
    $ids[$k]=substr($temp[1],0,(strlen($temp[1])-1));
    unset($temp);
}


	for($i=0; $i<count($raw); $i++){
		for($j=0; $j<count($raw); $j++){
			if($i!=$j && $ids[$i]==$ids[$j]){
				$tempAmount=$ams[$i]+$ams[$j];
				$ams[$i]=$tempAmount;
				unset($ids[$j]);
				unset($ams[$j]);
				$ids=array_values($ids);
				$ams=array_values($ams);
				unset($tempAmount);
			}
		}
	}
echo "

";
for($i=0; $i<count($ids); $i++)
	echo $ams[$i]."x:".$ids[$i]."#;"
?>
output corretto di questo altro programma
1x:3#;3x:3#;4x:3#;5x:9#;4x:2#;1x:3#;3x:3#;4x:3#;5x :9#;4x:2#; // echo $_COOKIE['cart_content']

10x:9#;8x:2#;16x:3#; // output della stringa corretta che dovrebbe essere salvata nel cookie