Troxy Medlem sedan mars 2004 1 505 inlägg Frågan 13 nov. 2005 12:26 #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
)
M Melea Medlem sedan juli 2003 3 147 inlägg $fruits = array(1 => 'banana', 'apple', 'raspberry');
Troxy Medlem sedan mars 2004 1 505 inlägg Men det där är ju hårdkodat...Finns det ingen färdig funktion? Eller måste jag skriva en egen? :/
Matte Medlem sedan aug. 2000 2 975 inlägg 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>";
M Melea Medlem sedan juli 2003 3 147 inlägg $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.
A aasah Medlem sedan mars 2003 4 471 inlägg
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)
M Melea Medlem sedan juli 2003 3 147 inlägg 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.
A aasah Medlem sedan mars 2003 4 471 inlägg
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
M Melea Medlem sedan juli 2003 3 147 inlägg 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?
A aasah Medlem sedan mars 2003 4 471 inlägg Jag ska nog testa först... Det är något jag definitivt inte ser!
Matte Medlem sedan aug. 2000 2 975 inlägg 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.
A aasah Medlem sedan mars 2003 4 471 inlägg 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.
M Melea Medlem sedan juli 2003 3 147 inlägg 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.
A aasah Medlem sedan mars 2003 4 471 inlägg
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