PDA

View Full Version : [PHP] Replace su un array multidimensionale


robertino_salemi
15-12-2014, 14:17
Salve a tutti,
premesso che il mio progetto riguarda Wordpress, ma il mio dubbio / problema riguarda PHP.

Ho il seguente array:

[id] => user-info
[title] => Foto del profilo di admin admin
[parent] => user-actions
[href] => http://nomesito.it/wp-admin/profile.php
[group] =>
[meta] =>


ottenuta tramite la funziona get_node() (http://codex.wordpress.org/Function_Reference/get_node) di Wordpress.

Leggo il "node" che interessa:

$user_info_new_link = $wp_admin_bar->get_node('edit-profile');

fin qui tutto ok.

$user_info_new_link mi ristituisce l'array sopra.

Vorrei eseguire un semplice replay del title, tramite:

$user_info_new_link->title = str_replace('admin', 'Modifica il tuo profilo', $user_info_new_link->title);


ovviamente 'admin' è valore dinamico, ma su questo non ho problemi.

Il replace non va, non riesco a salvare il valore di title per eseguire il replace.

Ho provato anche con $user_info_new_link['title'] ma niente da fare...

Grazie.

Daniels118
15-12-2014, 14:28
Non conosco wordpress, ma guardando il codice della funzione get_node (https://core.trac.wordpress.org/browser/tags/4.0.1/src/wp-includes/class-wp-admin-bar.php#L0) si apprende che ogni volta che viene invocata restituisce una copia dell'oggetto richiesto:
final public function get_node( $id ) {
if ( $node = $this->_get_node( $id ) )
return clone $node;
}
Ciò significa che se modifichi un campo dell'oggetto restituito da get_node la modifica avverrà sulla copia e non sull'oggetto originale; se un altro modulo chiama get_node otterrà un'altra copia dell'oggetto originale.

robertino_salemi
16-12-2014, 10:15
Ok, mi sta bene, tramite

$user_info_new_link->title = new_string;

posso associare il nuovo valore.

Ma come faccio ad eseguire un str_replace e salvare in una variabile il valore attuale di 'title'?

Grazie.

Daniels118
16-12-2014, 13:04
$variabile = $user_info_new_link->title;
$user_info_new_link->title=str_replace(...);
?
Oppure
$user_info_new_link->title=str_replace(...);
$variabile = $user_info_new_link->title;
?

robertino_salemi
16-12-2014, 13:35
Daniels, avevo già provato la tua indicazione, ma non va...

Ho risolto così:


foreach( $user_info_new_link as $key => $value ) {
if( $key == 'title' ) {
str_replace('admin', 'modifica il tuo profilo', $value );
}
}


Grazie! ;)

Daniels118
16-12-2014, 13:52
Tutto ciò ha dell'assurdo, str_replace restituisce una nuova stringa, non modifica la stringa di input, in quel modo il risultato della sostituzione viene scartato. O non hai postato il VERO codice oppure... boh, non riesco ad immaginare alternative.

robertino_salemi
16-12-2014, 14:14
Scusami, ho commesso un errore nel copia-incolla:


foreach( $user_info_new_link as $key => $value ) {
if( $key == 'title' ) {
$user_info_new_link->title = str_replace('admin', 'Modifica il tuo profilo', $value );
}
}


:)