Wie indiziert man ein Array in PHP neu, aber mit Indizes, die bei 1 beginnen?

Lesezeit: 5 Minuten

Wie indiziert man ein Array in PHP neu aber mit
meleyal

Ich habe das folgende Array, das ich neu indizieren möchte, damit die Schlüssel umgekehrt sind (idealerweise beginnend bei 1):

Aktuelles Array (bearbeiten: Das Array sieht tatsächlich so aus):

Array (

[2] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Section
        [linked] => 1
    )

[1] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Sub-Section
        [linked] => 1
    )

[0] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Sub-Sub-Section
        [linked] => 
    )

)

Wie es sein sollte:

Array (

[1] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Section
        [linked] => 1
    )

[2] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Sub-Section
        [linked] => 1
    )

[3] => Object
    (
        How do you reindex an array in PHP but with indexes starting from 1? => Sub-Sub-Section
        [linked] => 
    )

)

  • Wo ist etwas verkehrt?

    – Gumbo

    26. Februar 2009 um 15:51 Uhr

  • Siehe meine Bearbeitung des ersten Beispiels

    – meleyal

    26. Februar 2009 um 15:58 Uhr

  • Und warum muss der Index des ersten Elements 1 sein? Nur eine Formatsache oder zur internen Weiterverarbeitung?

    – Gumbo

    26. Februar 2009 um 16:24 Uhr

  • Es wird als Parameter für eine Funktion verwendet, um ein URL-Segment zu erhalten, etwas wie get_url_segment(1) würde zB auf dieser Seite “Fragen” zurückgeben.

    – meleyal

    26. Februar 2009 um 16:50 Uhr

Wie indiziert man ein Array in PHP neu aber mit
Andreas Moore

Wenn Sie beginnend bei Null neu indizieren möchten, gehen Sie einfach wie folgt vor:

$iZero = array_values($arr);

Wenn Sie möchten, dass es bei eins beginnt, verwenden Sie Folgendes:

$iOne = array_combine(range(1, count($arr)), array_values($arr));

Hier die Manualpages für die verwendeten Funktionen:

  • Sie sollten range(0, count($arr) – 1) verwenden, damit Sie ein nullindiziertes Array erhalten.

    – Max Hartshorn

    10. August 2015 um 14:54 Uhr

  • Es ist großartig, alternativ können Sie versuchen, array_unshift($arr,”) zu verwenden, um ein nullindiziertes Element hinzuzufügen, und dann unset($arr[0]), um es zu entfernen, wodurch alle Indizes um eins nach oben verschoben werden. Es ist vielleicht schneller als array_combine(). Oder nicht 🙂

    – Steve Horvath

    2. Oktober 2018 um 4:37 Uhr


  • Beachten Sie, dass array_values gibt eine Kopie des Arrays zurück. Also, wenn Sie dann Verweise auf das Array haben array_splice wäre besser. Siehe @imagiro-Lösung.

    – Nux

    1. August 2019 um 13:09 Uhr

  • Nur array_values() damit es funktioniert, wenn Sie die ganze Zeit mit Index 0 beginnen.

    – kishor10d

    13. Februar 2020 um 5:33 Uhr

  • @ kishor10d das ist nicht das, was diese Frage stellt!

    – mickmackusa

    25. November 2020 um 20:42 Uhr

1646982847 448 Wie indiziert man ein Array in PHP neu aber mit
Sandra

Hier ist der beste Weg:

# Array
$array = array('tomato', '', 'apple', 'melon', 'cherry', '', '', 'banana');

das kehrt zurück

Array
(
    [0] => tomato
    [1] => 
    [2] => apple
    [3] => melon
    [4] => cherry
    [5] => 
    [6] => 
    [7] => banana
)

indem Sie dies tun

$array = array_values(array_filter($array));

Du bekommst das

Array
(
    [0] => tomato
    [1] => apple
    [2] => melon
    [3] => cherry
    [4] => banana
)

Erläuterung

array_values() : Gibt die Werte des Eingabearrays zurück und indiziert numerisch.

array_filter() : Filtert die Elemente eines Arrays mit einer benutzerdefinierten Funktion (UDF Wenn keine angegeben ist, alle Einträge in der Eingabetabelle mit dem Wert FALSE werden gelöscht.)

  • Wenn Ihnen die Reihenfolge egal ist, können Sie auch einfach sort($array);

    – Peter M.Elias

    4. September 2012 um 16:13 Uhr

  • array_filter() scheint für die Beispieldaten völlig irrelevant zu sein.

    – mickmackusa

    4. Januar 2020 um 5:20 Uhr

  • Das OP möchte, dass die Schlüssel bei 1 beginnen. Dies ist die richtige Antwort auf eine andere Frage.

    – mickmackusa

    25. November 2020 um 20:45 Uhr

Ich habe gerade herausgefunden, dass du auch eine machen kannst

array_splice($ar, 0, 0);

Dadurch wird die Neuindizierung an Ort und Stelle durchgeführt, sodass Sie am Ende keine Kopie des ursprünglichen Arrays erhalten.

Wie indiziert man ein Array in PHP neu aber mit
Gumbo

Warum neu indizieren? Fügen Sie einfach 1 zum Index hinzu:

foreach ($array as $key => $val) {
    echo $key + 1, '<br>';
}

Bearbeiten Nachdem die Frage geklärt ist: Du könntest die verwenden array_values um den Index beginnend bei 0 zurückzusetzen. Dann könnten Sie den obigen Algorithmus verwenden, wenn Sie nur möchten, dass gedruckte Elemente bei 1 beginnen.

1646982849 499 Wie indiziert man ein Array in PHP neu aber mit
Peter Bailey

Nun, ich würde gerne denken, dass Sie das Array für das, was auch immer Ihr Endziel ist, nicht wirklich so ändern müssten, dass es 1-basiert im Gegensatz zu 0-basiert ist, sondern es stattdessen zur Iterationszeit handhaben könnte, wie Gumbo gepostet hat.

aberum Ihre Frage zu beantworten, diese Funktion sollte jedes Array in eine 1-basierte Version konvertieren

function convertToOneBased( $arr )
{
    return array_combine( range( 1, count( $arr ) ), array_values( $arr ) );
}

BEARBEITEN

Hier ist eine wiederverwendbare/flexiblere Funktion, falls Sie dies wünschen

$arr = array( 'a', 'b', 'c' );

echo '<pre>';
print_r( reIndexArray( $arr ) );
print_r( reIndexArray( $arr, 1 ) );
print_r( reIndexArray( $arr, 2 ) );
print_r( reIndexArray( $arr, 10 ) );
print_r( reIndexArray( $arr, -10 ) );
echo '</pre>';

function reIndexArray( $arr, $startAt=0 )
{
    return ( 0 == $startAt )
        ? array_values( $arr )
        : array_combine( range( $startAt, count( $arr ) + ( $startAt - 1 ) ), array_values( $arr ) );
}

Dies wird tun, was Sie wollen:

<?php

$array = array(2 => 'a', 1 => 'b', 0 => 'c');

array_unshift($array, false); // Add to the start of the array
$array = array_values($array); // Re-number

// Remove the first index so we start at 1
$array = array_slice($array, 1, count($array), true);

print_r($array); // Array ( [1] => a [2] => b [3] => c ) 

?>

Vielleicht möchten Sie überlegen, warum Sie überhaupt ein 1-basiertes Array verwenden möchten. Nullbasierte Arrays (bei Verwendung nicht-assoziativer Arrays) sind ziemlich Standard, und wenn Sie an eine Benutzeroberfläche ausgeben möchten, würden die meisten die Lösung handhaben, indem Sie einfach die Ganzzahl bei der Ausgabe an die Benutzeroberfläche erhöhen.

Denken Sie an Konsistenz – sowohl in Ihrer Anwendung als auch in dem Code, mit dem Sie arbeiten – wenn Sie an 1-basierte Indexer für Arrays denken.

  • Dies korreliert direkt mit der Trennung zwischen Geschäftsschicht und Präsentationsschicht. Wenn Sie den Code in Ihrer Logik ändern, um die Präsentation anzupassen, tun Sie schlechte Dinge. Wenn Sie dies beispielsweise für einen Controller getan haben, ist Ihr Controller plötzlich an einen bestimmten View-Renderer gebunden, anstatt Daten für den View-Renderer vorzubereiten, den er verwendet (php, json, xml, rss usw.).

    – Tres

    13. April 2011 um 23:46 Uhr

990180cookie-checkWie indiziert man ein Array in PHP neu, aber mit Indizes, die bei 1 beginnen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy