[php]Midden in een array shiften

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
ik heb een array met id's met gewone keys, bijvoorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
[0] => 473
[1] => 474
[2] => 475
[3] => 476
[4] => 477
[5] => 478
[6] => 971
[7] => 972
[8] => 987
[9] => 1062
[10] => 1061


nu zou ik graag met twee parameters bepaalde elementen verplaatsen. Bijv 477 en up moet het element met key 4 verplaatsen naar de 3de plaats en die met key 3 dus naar 4.

Nu kan ik met array_search($id, $ranks); de key vinden die ik wil verplaatsen. Maar ik kom maar niet op een snelle manier om deze aan de hand van de parameter 'up' of 'down' hem een plaats te verplaatsen in de array.

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

PHP:
1
2
3
$temp = $array[4];
$array[4] = $array[3];
$array[3] = $temp;
?

Wat bedoel je trouwens met 'up' en 'down'?

[ Voor 21% gewijzigd door AtleX op 05-05-2008 16:38 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat jij wil is een swap van 2 elementen als ik het goed begrijp.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

AtleX schreef op maandag 05 mei 2008 @ 16:37:
Wat bedoel je trouwens met 'up' en 'down'?
Dat geeft aan of hij met een item met een lagere of hogere key verwisseld moet worden, lijkt me. ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
wolkje schreef op maandag 05 mei 2008 @ 16:39:
[...]

Dat geeft aan of hij met een item met een lagere of hogere key verwisseld moet worden, lijkt me. ;)
yep, dus dat je key x verwisseld met die boven of onder hem.

Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
AtleX schreef op maandag 05 mei 2008 @ 16:37:
PHP:
1
2
3
$temp = $array[4];
$array[4] = $array[3];
$array[3] = $temp;
?

Wat bedoel je trouwens met 'up' en 'down'?
PHP:
1
2
3
4
5
6
7
8
9
Function ShiftUp($array, $key) {
$temp = $array[$key + 1];
$array[$key] = $array[$key - 1];
$array[$key +1] = $temp;
}

Function ShiftDown {
Enz......;
}

Acties:
  • 0 Henk 'm!

  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
AtleX schreef op maandag 05 mei 2008 @ 16:37:
PHP:
1
2
3
$temp = $array[4];
$array[4] = $array[3];
$array[3] = $temp;
?

Wat bedoel je trouwens met 'up' en 'down'?
hmz ik was weer te moeilijk aan het denken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$currentRank = array_search($id, $ranks);

if($direction == 'up')
{
    $temp = $ranks[$currentRank-1];
    $ranks[$currentRank-1] = $ranks[$currentRank];
    $ranks[$currentRank] = $temp;
}
elseif($direction = 'down')
{
    $temp = $ranks[$currentRank+1];
    $ranks[$currentRank+1] = $ranks[$currentRank];
    $ranks[$currentRank] = $temp;
}

Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
PHP:
1
elseif = 'down'


Pas op!

[ Voor 14% gewijzigd door fleppuhstein op 05-05-2008 16:49 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function Swap($array, $src, $dst) {
   $temp = $array[$src];
   $array[$src] = $array[$dst];
   $array[$dst] = $temp;
}

function ShiftUp($array, $elem) {
  Swap($array, $elem, $elem-1);
}

function ShiftDown($array, $elem) {
  Swap($array, $elem, $elem+1);
}
?>


Disclaimer: Ik ben geen PHP-er, maar zoiets zou het moeten zijn. En dan is het stukken generieker en bruikbaarder in veel meer gevallen; je houdt er namelijk een mooie Swap routine aan over die veel meer kan dan up/down-shiften ;) :Y)

@Hieronder: Uiteraard; hier ontbreken wat bounds-checks die er eigenlijk wel in horen maar vanwege overzichtelijkheid achterwege zijn gelaten. Dat doe je trouwens dan best in de Swap methode, maar dat spreekt voor zich neem ik aan ;)

[ Voor 26% gewijzigd door RobIII op 05-05-2008 19:14 . Reden: Casing aangepast van Function en ; toegevoegd voor de mierencopulators :P ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dat is idd een elegantere aanpak. Overigens moet je wel met referenties of return values werken, en zou de defensief ingestelde devvert mogelijk ook nog wel isset checks op die elementen willen doen, maar dat is allemaal triviaal in te bouwen. :)

[ Voor 6% gewijzigd door Voutloos op 05-05-2008 16:57 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Woei.. spuit elf, laat maar. Er staan genoeg simpelere oplossingen.

[ Voor 99% gewijzigd door Patriot op 05-05-2008 17:03 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

[mierencopulator]
RobIII, PHP is case sensitive ;)
[/mierencopulator]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MueR schreef op maandag 05 mei 2008 @ 17:29:
[mierencopulator]
RobIII, PHP is case sensitive ;)
[/mierencopulator]
Waar zie je de fout dan? O-)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
RobIII schreef op maandag 05 mei 2008 @ 17:48:
[...]

Waar zie je de fout dan? O-)
[mierencopulator²]
Die fout zie ik niet, maar in PHP sluit je statements af met een ; ;)
[/mierencopulator²]

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

JanDM schreef op maandag 05 mei 2008 @ 19:13:
[...]

[mierencopulator²]
Die fout zie ik niet, maar in PHP sluit je statements af met een ; ;)
[/mierencopulator²]
Ik weet niet welke fout jij nu ziet, volgens mij ziet dat scriptje er prima uit hoor.

EDIT:

@Hieronder: Ah 8)7, laatste keer dat ik die reden zag stond dat wat betreft die ; er niet, of ik heb er overheen gelezen :+

[ Voor 18% gewijzigd door Patriot op 05-05-2008 23:28 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Patriot schreef op maandag 05 mei 2008 @ 19:18:
[...]


Ik weet niet welke fout jij nu ziet, volgens mij ziet dat scriptje er prima uit hoor.
Zie de editreden ;) O-)
Maar genoeg offtopic geweest nu...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1