Gibt es eine Möglichkeit, alle Zifferntasten in “Name” zu ändern, ohne das Array zu durchlaufen (eine native PHP-Funktion)?
[
0 => 'blabla',
1 => 'blabla',
2 => 'blblll',
// etc ...
]
Gibt es eine Möglichkeit, alle Zifferntasten in “Name” zu ändern, ohne das Array zu durchlaufen (eine native PHP-Funktion)?
[
0 => 'blabla',
1 => 'blabla',
2 => 'blblll',
// etc ...
]
Eric Goodwin
Wenn Sie ein Array von Schlüsseln haben, die Sie verwenden möchten, verwenden Sie array_combine
Gegeben $keys = array(‘a’, ‘b’, ‘c’, …) und Ihr Array, $list, dann tun Sie dies:
$list = array_combine($keys, array_values($list));
Liste wird jetzt array(‘a’ => ‘blabla 1’, …) etc.
Sie müssen verwenden array_values
um nur die Werte aus dem Array zu extrahieren und nicht die alten, numerischen Schlüssel.
Das sieht nett und einfach aus, aber array_values erstellt eine vollständige Kopie des Arrays, sodass Sie Platzprobleme haben könnten. Alles, was wir hier tun, ist, PHP das Schleifen für uns erledigen zu lassen, nicht die Schleife zu eliminieren. Ich wäre versucht, etwas mehr zu tun wie:
foreach ($list as $k => $v) {
unset ($list[$k]);
$new_key = *some logic here*
$list[$new_key] = $v;
}
Ich glaube nicht, dass es so viel effizienter ist als der erste Code, aber es bietet mehr Kontrolle und wird keine Probleme mit der Länge der Arrays haben.
Kent Fredrik
Nein, gibt es nicht, für den Anfang ist es unmöglich, ein Array mit Elementen zu haben, die denselben Schlüssel teilen
$x =array();
$x['foo'] = 'bar' ;
$x['foo'] = 'baz' ; #replaces 'bar'
Zweitens, wenn Sie den Nummern lediglich ein Präfix voranstellen möchten
$x[0] --> $x['foo_0']
Das ist rechnerisch unplausibel ohne Schleifen. Derzeit gibt es keine PHP-Funktionen für die Aufgabe des “Schlüsselpräfixierens”, und das kommt dem am nächsten “Extrakt” wodurch numerische Tasten vorangestellt werden, bevor sie zu Variablen werden.
Der einfachste Weg ist dieser:
function rekey( $input , $prefix ) {
$out = array();
foreach( $input as $i => $v ) {
if ( is_numeric( $i ) ) {
$out[$prefix . $i] = $v;
continue;
}
$out[$i] = $v;
}
return $out;
}
Darüber hinaus glaube ich, wenn Sie die Verwendung von XMLWriter lesen, dass Sie XML auf schlechte Weise schreiben würden.
<section>
<foo_0></foo_0>
<foo_1></foo_1>
<bar></bar>
<foo_2></foo_2>
</section>
Ist kein gutes XML.
<section>
<foo></foo>
<foo></foo>
<bar></bar>
<foo></foo>
</section>
Ist besser XML, denn bei der Interpretation spielen die doppelten Namen keine Rolle, da sie alle numerisch wie folgt versetzt sind:
section => {
0 => [ foo , {} ]
1 => [ foo , {} ]
2 => [ bar , {} ]
3 => [ foo , {} ]
}
Aurelien
Dies ist ein Beispiel, bei dem allen Tasten ein Unterstrich vorangestellt wird.
Wir gebrauchen array_combine
um die Array-Schlüssel mit den Array-Werten zu kombinieren, aber wir führen zuerst eine aus array_map
Funktion auf den Array-Schlüsseln, die eine einfache Funktion übernimmt, die das Präfix hinzufügt.
$prefix = '_';
$arr = array_combine(
array_map(function($v) use ($prefix){
return $prefix.$v;
}, array_keys($arr)),
array_values($arr)
);
Sehen Sie sich ein Live-Beispiel an Hier.
Ich habe dies als Antwort auf eine andere Frage hinzugefügt und schien relevant zu sein. Hoffentlich könnte jemandem helfen, der den Wert der Schlüssel in einem Array ändern muss. Verwendet eingebaute Funktionen für PHP.
$inputArray = array('app_test' => 'test', 'app_two' => 'two');
/**
* Used to remap keys of an array by removing the prefix passed in
*
* Example:
* $inputArray = array('app_test' => 'test', 'app_two' => 'two');
* $keys = array_keys($inputArray);
* array_walk($keys, 'removePrefix', 'app_');
* $remappedArray = array_combine($keys, $inputArray);
*
* @param $value - key value to replace, should be from array_keys
* @param $omit - unused, needed for prefix call
* @param $prefix - prefix to string replace in keys
*/
function removePrefix(&$value, $omit, $prefix) {
$value = str_replace($prefix, '', $value);
}
// first get all the keys to remap
$keys = array_keys($inputArray);
// perform internal iteration with prefix passed into walk function for dynamic replace of key
array_walk($keys, 'removePrefix', 'app_');
// combine the rewritten keys and overwrite the originals
$remappedArray = array_combine($keys, $inputArray);
// see full output of comparison
var_dump($inputArray);
var_dump($remappedArray);
Ausgang:
array(2) {
'attr_test' =>
string(4) "test"
'attr_two' =>
string(3) "two"
}
array(2) {
'test' =>
string(4) "test"
'two' =>
string(3) "two"
}
Die Lösung, wenn Sie verwenden XMLWriter
(heimisch PHP 5.2.x
<) verwendet $xml->startElement(‘itemName’);
Dadurch wird der Arrays-Schlüssel ersetzt.
Manoj Sharma
Ändern Sie den Namen des Array-Schlüssels “Gruppe” in “Kinder”.
<?php
echo json_encode($data);
function array_change_key_name( $orig, $new, &$array ) {
foreach ( $array as $k => $v ) {
$res[ $k === $orig ? $new : $k ] = ( (is_array($v)||is_object($v)) ? array_change_key_name( $orig, $new, $v ) : $v );
}
return $res;
}
echo '<br>=====change "group" to "children"=====<br>';
$new = array_change_key_name("group" ,"children" , $data);
echo json_encode($new);
?>
Ergebnis:
{"benchmark":[{"idText":"USGCB-Windows-7","title":"USGCB: Guidance for Securing Microsoft Windows 7 Systems for IT Professional","profile":[{"idText":"united_states_government_configuration_baseline_version_1.2.0.0","title":"United States Government Configuration Baseline 1.2.0.0","group":[{"idText":"security_components_overview","title":"Windows 7 Security Components Overview","group":[{"idText":"new_features","title":"New Features in Windows 7"}]},{"idText":"usgcb_security_settings","title":"USGCB Security Settings","group":[{"idText":"account_policies_group","title":"Account Policies group"}]}]}]}]}
=====change "group" to "children"=====
{"benchmark":[{"idText":"USGCB-Windows-7","title":"USGCB: Guidance for Securing Microsoft Windows 7 Systems for IT Professional","profile":[{"idText":"united_states_government_configuration_baseline_version_1.2.0.0","title":"United States Government Configuration Baseline 1.2.0.0","children":[{"idText":"security_components_overview","title":"Windows 7 Security Components Overview","children":[{"idText":"new_features","title":"New Features in Windows 7"}]},{"idText":"usgcb_security_settings","title":"USGCB Security Settings","children":[{"idText":"account_policies_group","title":"Account Policies group"}]}]}]}]}
LPL
Ich denke, dass er will:
$a = array(1=>'first_name', 2=>'last_name');
$a = array_flip($a);
$a['first_name'] = 3;
$a = array_flip($a);
print_r($a);
Dies macht alle möglichen Annahmen, wie zum Beispiel, dass die $a-Array-Werte alle Zeichenfolgen und alle eindeutig sind.
– Jason
2. Mai 2013 um 14:44 Uhr
Es ist leicht, Vermutungen anzustellen, wenn die Frage vage und unklar ist, ein reproduzierbares Minimalbeispiel fehlt und … unmöglich ist.
– mickmackusa
gestern
Lese ich das richtig? Es sieht so aus, als ob Sie möchten, dass alle Elemente in einem Array denselben Schlüssel haben.
– Viktoria
21. November 2008 um 13:14 Uhr
Ich tue es, um das Array in XML zu übersetzen.
– Jeff Atwood
21. November 2008 um 13:15 Uhr
Array-Schlüssel müssen eindeutig sein, wie versuchen Sie, dies in XML zu konvertieren, können Sie ein Codebeispiel posten?
– Neil Aitken
21. November 2008 um 13:18 Uhr
Verwendung von XML-Writer, der keine numerischen startElements zulässt.
– Matte
21. November 2008 um 13:19 Uhr
Für eine kanonische Frage mit so vielen Wegweisern ist dies eine ausgesprochen schlechte Frage mit vagen/unmöglichen Anforderungen. Sicherlich hat Stack Overflow der Welt der Softwareentwicklung etwas Besseres zu bieten.
– mickmackusa
gestern