[PHP] Internal pointer verplaatsen naar $i?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een stukje navigatie te maken voor op een site. Daarvoor haal ik het totaal aantal rijen op uit de db, met hun id's. Ik gebruik dus geen COUNT. Die id's gaan in een array. Nu krijg ik uit de url het nieuwe id door, en haal dmv een array_search de huidige key op.

Maar hoe zet ik de array internal pointer (zo heet dat geloof ik) nu op de huidige key? Zodat ik prev($rows) en next($rows) kan gebruiken voor de waarde uit de array met het id uit de url?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$current_key = array_search( $cid, $rows );
current($rows) = $current_key;  // ik hoopte het hiermee op te lossen, maar dit doet ie niet he :-), het geeft misschien wel aan wat ik wil

$pr_cid = prev($rows->projects_id);
$nav_start = !prev($rows) ? '<label class="j_navigation_disabled">'. _JP_PREVIOUS_PROJECT. '</label>' : '<a href="'. $return.'&amp;project='.$pr_cid.'" >'._JP_PREVIOUS_PROJECT.'</a>';
    
$nav_space = ' | ';
    
$nx_cid = next($rows->projects_id);
$nav_end = !next($rows) ? '<label class="j_navigation_disabled">'. _JP_NEXT_PROJECT. '</label>' : '<a href="'. $return.'&amp;project='.$nx_cid.'" >'._JP_NEXT_PROJECT.'</a>';
    
    $nav = $nav_start . $nav_space . $nav_end;


Ik heb ook scrip geprobeerd met dingen als:

PHP:
1
$nav_start = !prev($rows[$current_key]) ? '<labe...' //dus met $rows[$current_key]


maar dat gaf een fout, want het de array zelf moet in de prev staan en niet array met key.

Ik heb ook alle array functies op php.net bekeken, maar daar zag ik alleen current() dat in de buurt kwam, maar is het dus net niet. Je kan hiermee niet de internal pointer verplaatsen.

[ Voor 15% gewijzigd door Verwijderd op 21-08-2007 01:36 . Reden: stukje erbij met wat ik geprobeerd heb ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Op regel 1 weet je al de huidige key. Dus is $rows[$current_key - 1] en $rows[$current_key + 1] al het gewoon het antwoord. :)
Indien je array geen handige numerieke keys heeft, kan je array_values() gebruiken.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op dinsdag 21 augustus 2007 @ 08:48:
Op regel 1 weet je al de huidige key. Dus is $rows[$current_key - 1] en $rows[$current_key + 1] al het gewoon het antwoord. :)
Indien je array geen handige numerieke keys heeft, kan je array_values() gebruiken.
Het is allemaal zo simpel hè. :+

Ik heb de waarden om de : nog maar even omgedraaid, dat vond ik wel zo netjes. Dan hoef je niet meteen met het negatieve te beginnen in je statement. Weten jullie misschien hoe zo'n "constructie" heet? $var = statement ? yes : no;

Ik heb nu dit, en het werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$current_key = array_search( $cid, $rows );

$pr_cid = $rows[$current_key - 1];
$nav = $rows[$current_key - 1] ? '<a href="'. $return.'&amp;project='.$pr_cid.'" >'._JP_PREVIOUS_PROJECT.'</a>' : '<label class="j_navigation_disabled">'. _JP_PREVIOUS_PROJECT. '</label>';

$nav .= ' | ';

$nx_cid = $rows[$current_key + 1];
$nav .= $rows[$current_key + 1] ? '<a href="'. $return.'&amp;project='.$nx_cid.'" >'._JP_NEXT_PROJECT.'</a>' : '<label class="j_navigation_disabled">'. _JP_NEXT_PROJECT. '</label>' ;

return $nav;


Ik hou van efficiënt werken, maar weet niet altijd hoe. Dus nog 1 vraagje. Is er een manier hoe dit korter / netter kan?

Ik kan geloof ik "$pr_cid = $rows[$current_key - 1];" en "$nx_cid = $rows[$current_key + 1];" wel direct in de code plaatsen, al is het misschien niet zo netjes.

Mag je zo'n ($var = statement ? yes : no;) "constructie" breken naar een nieuwe regel? Zitten er voor of nadelen aan?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op dinsdag 21 augustus 2007 @ 10:30:
Weten jullie misschien hoe zo'n "constructie" heet? $var = statement ? yes : no;
Dat het de 'Ternary Operator'.
Mag je zo'n ($var = statement ? yes : no;) "constructie" breken naar een nieuwe regel? Zitten er voor of nadelen aan?
Je gebruikt hem hier als beknopt geschreven if ... else statement. Schrijf het dan helemaal uit als je dat blijkbaar netjes vind. :)
PHP:
1
2
3
4
if (conditie)
    $string .= 'waar';
else
    $string .= 'onwaar';
(al dan niet met accolades, zie syntax definitie en codestyle discussies)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Even chicaneren:
Voutloos schreef op dinsdag 21 augustus 2007 @ 10:36:
Dat heet de is een 'Ternary Operator'.