Wie benenne ich Sub-Array-Schlüssel in PHP um?

Lesezeit: 5 Minuten

Wenn ich var_dump auf eine Variable namens $tags (ein mehrdimensionales Array) ausführe, erhalte ich Folgendes:

Array
(
    [0] => Array
        (
            [name] => tabbing
            [url] => tabbing
        )

    [1] => Array
        (
            [name] => tabby ridiman
            [url] => tabby-ridiman
        )

    [2] => Array
        (
            [name] => tables
            [url] => tables
        )

    [3] => Array
        (
            [name] => tabloids
            [url] => tabloids
        )

    [4] => Array
        (
            [name] => taco bell
            [url] => taco-bell
        )

    [5] => Array
        (
            [name] => tacos
            [url] => tacos
        )
)

Ich möchte alle Array-Schlüssel mit dem Namen “url” in “value” umbenennen. Was wäre ein guter Weg, dies zu tun?

  • Siehe diesen SO-Beitrag: stackoverflow.com/questions/240660/…

    – Björn

    7. März 2012 um 16:19 Uhr

  • Mögliches Duplikat von PHP-Umbenennungs-Array-Schlüsseln in mehrdimensionalen Arrays

    – Kaleb

    8. März 2012 um 4:23 Uhr

  • In PHP >= 5.5.0 gibt es array_column was dafür möglicherweise nützlich sein könnte.

    – kenorb

    30. November 2015 um 18:23 Uhr

Benutzer-Avatar
Alex

Du könntest benutzen array_map() es zu tun.

$tags = array_map(function($tag) {
    return array(
        'name' => $tag['name'],
        'value' => $tag['url']
    );
}, $tags);

  • nett! Kurzer Hinweis: Closures (anonyme Funktionen) sind nur in PHP 5.3.0+ verfügbar

    – Stockente

    29. Januar 2014 um 9:57 Uhr

  • Kurzer Hinweis: Sie müssen PHP 5.6 oder höher verwenden, andernfalls führen Sie eine nicht unterstützte Version von PHP aus und können möglicherweise mit Sicherheitsproblemen rechnen.

    – Johannes Jagd

    9. September 2016 um 10:10 Uhr

  • sehr schnelle Anmerkung: Sie sparen Bäume, wenn Sie PHP 7 verwenden

    – pmiguelpinto

    10. Februar 2020 um 17:27 Uhr

  • Hallo, ich habe einen Fall mit mehreren Spalten, gibt es eine Möglichkeit, eine ähnliche Funktion zu verwenden, die nicht jedes Element überschreibt, sondern nur ändert? So viel Coding sonst…

    – Valter Ekholm

    9. August 2020 um 10:51 Uhr

Durchschleifen, neuen Key setzen, alten Key zurücksetzen.

foreach($tags as &$val){
    $val['value'] = $val['url'];
    unset($val['url']);
}

Benutzer-Avatar
Charybde BE

Apropos funktionales PHP, ich habe diese allgemeinere Antwort:

    array_map(function($arr){
        $ret = $arr;
        $ret['value'] = $ret['url'];
        unset($ret['url']);
        return $ret;
    }, $tag);
}

Rekursive PHP-Umbenennungsschlüsselfunktion:

function replaceKeys($oldKey, $newKey, array $input){
    $return = array(); 
    foreach ($input as $key => $value) {
        if ($key===$oldKey)
            $key = $newKey;

        if (is_array($value))
            $value = replaceKeys( $oldKey, $newKey, $value);

        $return[$key] = $value;
    }
    return $return; 
}

Benutzer-Avatar
Herr Griever

foreach ($basearr as &$row)
{
    $row['value'] = $row['url'];
    unset( $row['url'] );
}

unset($row);

  • Warnung: Die Referenz von $row und das letzte Array-Element bleiben auch nach der foreach-Schleife erhalten. Es wird empfohlen, es durch unset() zu zerstören. Andernfalls kann es zu unerwartetem Verhalten kommen. Sehen secure.php.net/manual/en/control-structures.foreach.phpstackoverflow.com/q/3307409, stackoverflow.com/q/4969243

    – Schmerz

    10. April 2018 um 5:26 Uhr

  • Zumindest benutzt du es nicht $row nach der Iteration und foreach innerhalb einer Funktion ausgeführt wird, wird es nach dem Ende der Funktion automatisch zerstört. Irgendwann $row kann nützlich sein, wenn Sie die Iteration unterbrochen haben und das letzte iterierte Element außerhalb verwenden möchten foreach.

    – StefansArya

    2. November 2018 um 14:09 Uhr

  • Danke @griever, du sparst meine Zeit

    – Faridul Khan

    27. August 2020 um 11:58 Uhr

Benutzer-Avatar
Stefan Fraser

Dies sollte in den meisten Versionen von PHP 4+ funktionieren. Array-Map mit anonymen Funktionen wird unter 5.3 nicht unterstützt.

Auch die foreach-Beispiele geben eine Warnung aus, wenn die strikte PHP-Fehlerbehandlung verwendet wird.

Hier ist eine kleine mehrdimensionale Schlüsselumbenennungsfunktion. Es kann auch verwendet werden, um Arrays zu verarbeiten, um die richtigen Schlüssel für die Integrität in Ihrer gesamten App zu haben. Es werden keine Fehler ausgegeben, wenn ein Schlüssel nicht vorhanden ist.

function multi_rename_key(&$array, $old_keys, $new_keys)
{
    if(!is_array($array)){
        ($array=="") ? $array=array() : false;
        return $array;
    }
    foreach($array as &$arr){
        if (is_array($old_keys))
        {
            foreach($new_keys as $k => $new_key)
            {
                (isset($old_keys[$k])) ? true : $old_keys[$k]=NULL;
                $arr[$new_key] = (isset($arr[$old_keys[$k]]) ? $arr[$old_keys[$k]] : null);
                unset($arr[$old_keys[$k]]);
            }
        }else{
            $arr[$new_keys] = (isset($arr[$old_keys]) ? $arr[$old_keys] : null);
            unset($arr[$old_keys]);
        }
    }
    return $array;
}

Die Nutzung ist einfach. Sie können entweder einen einzelnen Schlüssel wie in Ihrem Beispiel ändern:

multi_rename_key($tags, "url", "value");

oder ein komplexeres Multikey

multi_rename_key($tags, array("url","name"), array("value","title"));

Es verwendet eine ähnliche Syntax wie preg_replace(), wobei die Anzahl von $old_keys und $new_keys gleich sein sollte. Wenn sie jedoch nicht vorhanden sind, wird ein leerer Schlüssel hinzugefügt. Dies bedeutet, dass Sie es verwenden können, um Ihrem Array ein Sortier-IF-Schema hinzuzufügen.

Benutze das ständig, hoffe es hilft!

  • Warnung: Die Referenz von $row und das letzte Array-Element bleiben auch nach der foreach-Schleife erhalten. Es wird empfohlen, es durch unset() zu zerstören. Andernfalls kann es zu unerwartetem Verhalten kommen. Sehen secure.php.net/manual/en/control-structures.foreach.phpstackoverflow.com/q/3307409, stackoverflow.com/q/4969243

    – Schmerz

    10. April 2018 um 5:26 Uhr

  • Zumindest benutzt du es nicht $row nach der Iteration und foreach innerhalb einer Funktion ausgeführt wird, wird es nach dem Ende der Funktion automatisch zerstört. Irgendwann $row kann nützlich sein, wenn Sie die Iteration unterbrochen haben und das letzte iterierte Element außerhalb verwenden möchten foreach.

    – StefansArya

    2. November 2018 um 14:09 Uhr

  • Danke @griever, du sparst meine Zeit

    – Faridul Khan

    27. August 2020 um 11:58 Uhr

Benutzer-Avatar
Jules Kolle

Sehr einfacher Ansatz, um Schlüssel in einem mehrdimensionalen Array zu ersetzen, und vielleicht sogar ein bisschen gefährlich, sollte aber gut funktionieren, wenn Sie eine Art Kontrolle über das Quellarray haben:

$array = [ 'oldkey' => [ 'oldkey' => 'wow'] ];
$new_array = json_decode(str_replace('"oldkey":', '"newkey":', json_encode($array)));
print_r($new_array); // [ 'newkey' => [ 'newkey' => 'wow'] ]

1012070cookie-checkWie benenne ich Sub-Array-Schlüssel in PHP um?

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

Privacy policy