44

ページにアクセスするたびに配列に数値を追加するコードがあります。番号は Cookie に保存され、後で取得されます。

配列に最新の 5 つの数値のみを保持したいと思います。

配列がいっぱい (5 項目) で、新しい番号を追加する必要がある場合は、最も古い番号を削除し、最新の項目を保持する必要があります。

ここに私が持っているものがあります:

    $lastviewedarticles = array();

if (isset($_COOKIE["viewed_articles"]) ) {
  $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]);
}

if (!in_array($articleid, $lastviewedarticles)){
    $lastviewedarticles[] = $articleid;
}
setcookie("viewed_articles", serialize($lastviewedarticles));
4

4 に答える 4

222

array_sliceは配列のスライスを返します

array_slice($array, 0, 5) // return the first five elements
于 2013-03-07T07:50:28.197 に答える
9

array_splice と array_unique を使用して、5 つの一意の配列値を取得します

array_splice(array_unique($lastviewedarticles), 0, 5);
于 2013-03-07T07:52:01.040 に答える
8

まず、配列の長さを取得する必要があると思います。次に、長さが5以上の場合は、最初の要素を削除し、要素を配列の最後に追加します。

if (!in_array($articleid, $lastviewedarticles)){
    $count = count($lastviewedarticles);
    if($count>=5)
        array_shift($lastviewedarticles);
    $lastviewedarticles[] = $articleid;
}
于 2013-03-07T07:53:30.440 に答える
0

カウンターを使用して配列にアクセスし、すべての呼び出しでインクリメントし、モジュラス操作を使用して配列に書き込みます。カウンターが複数回の呼び出しで持続する必要がある場合は、セッション変数または Cookie に保存する必要があります。

$i がカウンター変数を保持していると仮定すると、これは次のようになります

if (!in_array($articleid, $lastviewedarticles)){
   $lastviewedarticles[$i%5] = $articleid;
   $i++;
}

結果は、常に最後の 5 つの値を含むプリミティブ リング バッファーになります。

于 2013-03-07T07:51:49.460 に答える