2016-12-02 2 views
0

Ich habe ein Array mit mehreren Elementen. Ich möchte nur die 10 neuesten Werte beibehalten. Also kehre ich das Array in einer Schleife um und überprüfe, ob das Element innerhalb des ersten 10 Bereichs liegt und wenn nicht, lösche ich das Element vom Array.Array mit nur 10 letzten Werten

Nur Problem ist, dass die Unset nicht funktioniert. Ich verwende den Schlüssel, um das Element zu deaktivieren, aber irgendwie funktioniert das nicht. Das Array wächst weiter. Irgendwelche Ideen?

$currentitem = rand(0,100); 

$lastproducts = unserialize($_COOKIE['lastproducts']); 
$count = 0; 

foreach(array_reverse($lastproducts) as $key => $lastproduct) { 

    if ($count <= 10) { 
     echo "item[$key]: $lastproduct <BR>";  
    } 

    else { 
     echo "Too many elements. Unsetting item[$key] with value $lastproduct <BR>"; 
     unset($lastproducts[$key]); 
    } 

    $count = $count + 1; 

} 

array_push($lastproducts, $currentitem); 

setcookie('lastproducts', serialize($lastproducts), time()+3600); 
+2

sidente: mind markieren alle anderen Fragen als gelöst, diejenigen, die Ihnen Lösungen gegeben haben? Andernfalls werden die Leute denken, dass sie nicht gelöst sind und mehr Antworten posten. –

+1

Überprüfen Sie http://StackOverflow.com/Questions/5468912/PHP-Get-the-last-3-Elements-of-an-array oder http://StackOverflow.com/Questions/3591867/how-to-get- das-last-n-artikel-in-einem-php-array-als-ein anderes-array –

+0

@SougataBose Ich würde genau dasselbe vorschlagen. Warum nicht ['array_slice()'] (http://php.net/manual/en/function.array-slice.php) oder ['array_splice()'] verwenden (http://php.net/manual/ en/function.array-splice.php)? Auf diese Weise ist es nicht notwendig, das Umkehrfeld zu durchlaufen, was den Prozess komfortabler und effizienter macht. – px06

Antwort

0

Ich glaube, ein besserer Weg, zuletzt wählen 10:

$selection = array(); 
foreach(array_reverse($lastproducts) as $key => $lastproduct) { 
    $selection[$key] = $lastproduct; 
    if (count($selection)>=10) break; 
} 

Schließlich $selection letzte 10 (oder weniger) Produkte haben wird.

0

Sie können array_splice($input, $offset) Funktion für diesen Zweck verwenden.

$last_items_count = 10; 
if(count($lastproducts) >= $last_items_count) { 
    $lastproducts = array_splice($lastproducts, count($lastproducts) - $last_items_count); 
} 

var_dump($lastproducts); 

Ich hoffe, dieser Code hilft.

Für weitere Informationen, hier ist die Dokumentation:

http://php.net/manual/en/function.array-splice.php

0

ich array_slice verwenden würde (http://php.net/array_slice) vielleicht wie:

$lastproducts = unserialize($_COOKIE['lastproducts']); 
// add on the end ... 
$lastproducts[] = $newproduct; 
// start at -10 from the end, give me 10 at most 
$lastproducts = array_slice($lastproducts, -10); 
// .... 
+1

'array_slice ($ lastproducts, -10); 'ist allein genug. Sie müssen den Parameter Länge nicht angeben. Bearbeiten Sie Ihre Antwort. – Perumal

0

Funktioniert hervorragend mit array_splice und array_slice, danke! :)

$lastproducts = unserialize($_COOKIE['lastproducts']); 

// remove this product from array 
$lastproducts = array_diff($lastproducts, array($productid)); 

// insert product on first position in array 
array_splice($lastproducts, 0, 0, $productid); 

// keep only first 15 products of array 
$lastproducts = array_slice($lastproducts, 0, 15); 
Verwandte Themen