2010-01-25 9 views
59

Se ho un array con gli oggetti:Come trasmettere gli elementi dell'array alle stringhe in PHP?

$a = array($objA, $objB); 

(ogni oggetto ha un -Metodo __toString())

Come posso esprimere tutti gli elementi della matrice di stringa in modo tale matrice $a non contiene più oggetti, ma la loro stringa rappresentazione? Esiste un one-liner o devo effettuare manualmente il loop attraverso l'array?

+0

Hai guardato http://php.net/array_map? – Kemo

+0

vedere - http://stackoverflow.com/questions/12682232/converting-array-values-to-string/42998701#42998701 –

+0

@RohitSuthar: la risposta collegata crea una matrice di una stringa. Questa domanda riguardava la conversione di una matrice di oggetti in una matrice della loro rappresentazione di stringa. – acme

risposta

118

una battuta:

$a = array_map('strval', $a); 
// strval is a callback function 

See PHP DOCS:

array_map

strval

Enjoy! ;)

+1

Dannazione, vorrei saperlo prima di pubblicare la mia risposta. +1 –

+1

implode (',', array_map ('strval', $ a)); farebbe il lavoro proletamente – Kemo

+1

@Kemo: non penso che voglia farlo. –

2

Sei alla ricerca di implode?

$array = array('lastname', 'email', 'phone'); 

$comma_separated = implode(",", $array); 

echo $comma_separated; // lastname,email,phone 
+0

No, perché la mia matrice è composta da oggetti, non da stringhe. E il risultato dovrebbe essere un array e non una stringa implosa. – acme

0

non posso provarlo in questo momento, ma si può controllare cosa succede quando si implode() come un array? Il _toString deve essere invocato.

+0

Lo fa. Il semplice 'implode ($ array)' farà. – Gordon

+1

@Gordon: Unirà tutte le stringhe in una, penso che l'OP voglia mantenere le stringhe '__toString()' negli elementi dell'array corrispondenti. –

+0

Esatto, voglio che la matrice sia ancora intatta e che solo gli elementi contenuti nella stringa siano stati convertiti in stringa. – acme

2

Non testato, ma qualcosa del genere dovrebbe farlo?

foreach($a as $key => $value) { 
    $new_arr[$key]=$value->__toString(); 
} 
$a=$new_arr; 
+0

leggi la domanda, c'è scritto "c'è un one-liner o devo fare un ciclo manualmente ..." :) – Kemo

+1

Sì, e come ho suggerito nel commento al post di Alix avrei offerto la sua soluzione se avessi saputo a proposito. –

+1

Perché questo ha ricevuto un voto negativo? –

-4

C'è qualche motivo per cui non è possibile eseguire quanto segue?

$a = array(
    (string) $objA, 
    (string) $objB, 
); 
+0

Sì, perché in realtà non so quanti elementi ci sono nella matrice. L'esempio sopra è stato ridotto a due elementi per renderlo più chiaro. – acme

0

Alix Axel ha la risposta più bella. È inoltre possibile applicare qualsiasi cosa per l'array anche se con array_map come ...

//All your objects to string. 
$a = array_map(function($o){return (string)$o;}, $a); 
//All your objects to string with exclamation marks!!! 
$a = array_map(function($o){return (string)$o."!!!";}, $a); 

Godetevi

Problemi correlati