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?

Alex
Du könntest benutzen array_map()
es zu tun.
$tags = array_map(function($tag) {
return array(
'name' => $tag['name'],
'value' => $tag['url']
);
}, $tags);
Durchschleifen, neuen Key setzen, alten Key zurücksetzen.
foreach($tags as &$val){
$val['value'] = $val['url'];
unset($val['url']);
}

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;
}

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

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!

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'] ]
10120700cookie-checkWie benenne ich Sub-Array-Schlüssel in PHP um?yes
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