Bir Diziler iç işaretçisi belirli bir pozisyona nasıl ayarlanır?

6 Cevap php

XML yerine bir veritabanı kullanarak küçük bir site oluşturmak için çalışıyor Im.

Ben görüntülenmesini içeriğine göre çalışacak bir sonraki ve önceki düğme oluşturmak istiyorum.

Ben php işlevi next () ve prev () yanı sıra güncel () bulundu ama ben geçerli sayfaya göre gitmek edebilmek için belirli bir konuma işaretçi ayarlamak için nasıl bilmiyorum.

$list=array('page1','page2','page3')

örneğin, eğer nasıl [1] bir sonraki ($ liste) yani page3 gösterir i $ listesinde olduğumu php söyleyebilirdi Page2 içeriğini görüntüleyen im?

Şimdiden teşekkürler

6 Cevap

Diziniz her zaman sürekli olarak (örn. 'sayfa1' endeks '0 her zaman olduğu) endeksli ise, oldukça basit:

$List = array('page1', 'page2', 'page3', 'page4', 'page5');
$CurrentPage = 3; // 'page4'

while (key($List) !== $CurrentPage) next($List); // Advance until there's a match

Otomatik dizin değişebilir ihtimali her zaman var, çünkü ben şahsen otomatik endeksleme güvenmeyin. Açıkça tuşlarını tanımlarken düşünmelisiniz:

$List = array(
    '1' => 'page1',
    '2' => 'page2',
    '3' => 'page3',
);

(Yerine tuşları) dizi değerlerini test etmek istiyorsanız, EDIT:, kullanmak current() :

while (current($List) !== $CurrentPage) next($List);

Using the functions below, you can get the next and previous values of the array. If current value is not valid or it is the last (first - for prev) value in the array, then:

  • the function getNextVal(...) returns the first element value
  • the function getPrevVal(...) returns the last element value

Işlevleri halkalı.

function getNextVal(&$array, $curr_val)
{
    $next = 0;
    reset($array);

    do
    {
        $tmp_val = current($array);
        $res = next($array);
    } while ( ($tmp_val != $curr_val) && $res );

    if( $res )
    {
        $next = current($array);
    }

    return $next;
}

function getPrevVal(&$array, $curr_val)
{
    end($array);
    $prev = current($array);

    do
    {
        $tmp_val = current($array);
        $res = prev($array);
    } while ( ($tmp_val != $curr_val) && $res );

    if( $res )
    {
        $prev = current($array);
    }

    return $prev;
}

Dizi göstericisi ağırlıklı bir PHP komut dosyası içinde bir dizi üzerinde döngü için kullanılır. Ben sayfadan diğerine taşımak için kullanmayı tavsiye etmem.

Bunun için, sadece sayfa numarası takip ve sayfa boyutunu (sayfa başına öğe sayısı) tutmak. Eğer başka bir sayfa yüklenirken olduğunuzda Ardından, dizi öğeleri göstermek için hangi karar için kullanabilirsiniz. Örneğin:

$pageNum = $_GET["pageNum"];
$pageSize = 10;
$startIndex = ($pageNum - 1) * $pageSize;
$endIndex = ($startIndex + $pageSize) - 1;

(Veya benzeri)

döngüler veya arama olmadan başka yöntemler.

list($prev,$next) = getPrevNext($oObjects,$sCurrentKey);

function getPrevNext($aArray,$key){
    $aKeys = array_keys($aArray); //every element of aKeys is obviously unique
    $aIndices = array_flip($aKeys); //so array can be flipped without risk
    $i = $aIndices[$key]; //index of key in aKeys
    if ($i > 0) $prev = $aArray[$aKeys[$i-1]]; //use previous key in aArray
    if ($i < count($aKeys)-1) $next = $aArray[$aKeys[$i+1]]; //use next key in aArray
    return array($prev,$next);
}

Using the functions below, you can get the next and previous KEYs of the array. If current key is not valid or it is the last (first - for prev) key in the array, then:

  • the function getNext(...) returns 0 (the first element key)
  • the function getPrev(...) returns the key of the last array element

Işlevleri halkalı.

function getNext(&$array, $curr_key)
{
    $next = 0;
    reset($array);

    do
    {
        $tmp_key = key($array);
        $res = next($array);
    } while ( ($tmp_key != $curr_key) && $res );

    if( $res )
    {
        $next = key($array);
    }

    return $next;
}

function getPrev(&$array, $curr_key)
{
    end($array);
    $prev = key($array);

    do
    {
        $tmp_key = key($array);
        $res = prev($array);
    } while ( ($tmp_key != $curr_key) && $res );

    if( $res )
    {
        $prev = key($array);
    }

    return $prev;
}

Ben dizinin anahtarı ile ayarlanmış dahili işaretçisi için bu kodu kullanabilirsiniz.

reset($List);
while (key($List) !== $id && key($List) !== null) next($List);
if(current($List) === false) end($List);

Bundan sonra önceki () veya next () kullanabilirsiniz.