webForumDet fria alternativet

Flytta på element i array

14 svar · 704 visningar · startad av Troxy

TroxyMedlem sedan mars 20041 508 inlägg
#1

Detta kanske är en onödigt enkelt fråga. Om jag har en array som ser ut såhär:

Array
(
   [0] => banana
   [1] => apple
   [2] => raspberry
)

Hur gör jag för att flytta alla element en position framåt? (PHP4)

Array
(
   [1] => banana
   [2] => apple
   [3] => raspberry
)
MeleaMedlem sedan juli 20032 667 inlägg
#2
$fruits = array(1 => 'banana', 'apple', 'raspberry');
TroxyMedlem sedan mars 20041 508 inlägg
#3

Men det där är ju hårdkodat...Finns det ingen färdig funktion? Eller måste jag skriva en egen? :/

MatteMedlem sedan aug. 20002 970 inlägg
#4

En variant/exempel:

// Vår array
$fruits = array('banana', 'apple', 'raspberry');

// Ändrar första index till 1
array_unshift($fruits, '');
unset($fruits[0]);

// och så kollar vi resultatet av exemplet
echo "<pre>";
print_r($fruits);
echo "</pre>";
MeleaMedlem sedan juli 20032 667 inlägg
#5
$fruits = array('banana', 'apple', 'raspberry');

foreach($fruits AS $key => $value) {
	$key++;
	$fruit[$key] = $value;
}

print('<pre>');
print_r($fruit);
print('</pre>');

Finns säkert något enklare sätt, men det funkar.

TroxyMedlem sedan mars 20041 508 inlägg
#6

Tack så mycket.

aasahMedlem sedan mars 20033 451 inlägg
#7

Melea skrev:

$fruits = array('banana', 'apple', 'raspberry');

foreach($fruits AS $key => $value) {
	$key++;
	$fruit[$key] = $value;
}

print('<pre>');
print_r($fruit);
print('</pre>');

Finns säkert något enklare sätt, men det funkar.

Gör det verkligen det? Blir det inte:

fruits = ([0] => banana, [1] => apple, [2] => raspberry)

Antingen, om alla index kommer med i foreach
Första varvet i foreach gäller: [0] => banana
Resultat: fruits = ([0] => banana, [1] => banana, [1] => apple, [2] => raspberry)

Andra varvet gäller: [1] => banana
Resultat: fruits = ([0] => banana, [1] => banana, [1] => apple, [2] => banana, [2] => raspberry)

Tredje varvet gäller: [1] => apple
Resultat: fruits = ([0] => banana, [1] => banana, [1] => apple, [2] => apple, [2] => banana, [2] => raspberry)
...

Eller om den enbart tar med de keys som finns i arrayen från start borde slutresultatet bli:
fruits = ([0] => banana, [1] => banana, [1] => apple, [2] => apple, [2] => raspberry, [3] => raspberry)

MeleaMedlem sedan juli 20032 667 inlägg
#8

Har du testat? Kan säkerligen vara någon inställningar i PHP om det inte funkar.
Hur som helst var det bara en variant på hur man kan gå till väga, Mattes variant är att föredra.

aasahMedlem sedan mars 20033 451 inlägg
#9

Melea skrev:

Har du testat? Kan säkerligen vara någon inställningar i PHP om det inte funkar...

Nej, jag har inte testat. Men du kan gärna förklara hur programmet ska veta att du vill bli av de gamla key-värdena och inte bara lägga till nya? :q

MeleaMedlem sedan juli 20032 667 inlägg
#10

Utan att köra loopen ser ju arrayen ut såhär:

array(0 => 'banana', 1 => 'apple', 2 => 'raspberry');

Det loopen gör är att den plockar ut siffrorna och lägger till 1 (++) för varje gång key körs i loopen.
Alltså blir resultatet

array(1 => 'banana', 2 => 'apple', 3 => 'raspberry');

Eller har jag missuppfattat vad du menar?

aasahMedlem sedan mars 20033 451 inlägg
#11

Jag ska nog testa först... Det är något jag definitivt inte ser!

MatteMedlem sedan aug. 20002 970 inlägg
#12

Vad melea gör är att han skriver över till en ny array. Den nya arrayen får det utseendet Melea säger, medan den gamla finns kvar i sin ursprungliga form.

Observera skillnaden mellan $fruits och $fruit.

aasahMedlem sedan mars 20033 451 inlägg
#13

OK. Bytte du namn på arrayen med flit? För i så fall förstår jag varför du säger att det funkar. Jag såg inte att du bytte namn förut.

Det jag menade var att följande program inte fungerar:

<?php

$fruits = array(0 => 'banana', 1 => 'apple', 2 => 'raspberry');

print('<html><head></head><body>A: <pre>');
print_r($fruits);
print('</pre><BR><BR>');

foreach($fruits AS $key => $value) {
    $key++;
    $fruits[$key] = $value;
}

print('B: <pre>');
print_r($fruits);
print('</pre></body></html>');

?>

Skriver ut:

A:
Array
(
[0] => banana
[1] => apple
[2] => raspberry
)

B:
Array
(
[0] => banana
[1] => banana
[2] => apple
[3] => raspberry
)

Vilket är något bättre än jag trodde, men första värdet ligger ju i alla fall kvar.

MeleaMedlem sedan juli 20032 667 inlägg
#14

Självklart bytte jag namn på arrayerna med flit. ;)
Tog för givet att du såg skillnaden i min förklaring, dumt att jag missade det.

aasahMedlem sedan mars 20033 451 inlägg
#15

Melea skrev:

Självklart bytte jag namn på arrayerna med flit. ;)
Tog för givet att du såg skillnaden i min förklaring, dumt att jag missade det.

Ibland läser man visst vad man tror att det står och inte vad det står... :r

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb