2010-01-25 40 views
59

Si tengo una matriz con los objetos:Cómo lanzar elementos de matriz a cadenas en PHP?

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

(cada objeto tiene un -method __toString())

¿Cómo puedo transmitir todos los elementos de la matriz a la cadena para que $a matriz no contiene más objetos, pero su cadena ¿representación? ¿Hay un trazador de líneas o tengo que recorrer manualmente el conjunto?

+0

has mirado http://php.net/array_map? – Kemo

+0

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

+0

@RohitSuthar: su respuesta vinculada crea una matriz de una cadena. Esta pregunta se trataba de convertir una matriz de objetos a una matriz de su representación de cadena. – acme

Respuesta

118

Una sola línea:

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

Ver PHP DOCS:

array_map

strval

disfrutar! ;)

+1

Maldita sea, ojalá lo supiera antes de publicar mi respuesta. +1 –

+1

implode (',', array_map ('strval', $ a)); haría el trabajo prolly – Kemo

+1

@Kemo: no creo que él quiera hacer eso. –

2

¿Está buscando implode?

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

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

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

No, porque mi matriz consta de objetos, no de cadenas. Y el resultado debería ser una matriz y no una cadena implosionada. – acme

0

no puedo probarlo ahora mismo, pero puedo comprobar lo que sucede cuando se implode() una gama tan amplia? Se debe invocar _toString .

+0

Lo hace. Simple 'implode ($ array)' funcionará. – Gordon

+1

@Gordon: Sin embargo, fusionará todas las cadenas en una, creo que OP desea mantener las cadenas '__toString()' generadas en los elementos de matriz correspondientes. –

+0

Correcto, quiero que la matriz esté intacta y solo los elementos que hay en ella estén en cadena. – acme

2

No probado, pero algo como esto debería hacerlo?

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

lea la pregunta, dice "¿hay un trazador de líneas o tengo que hacer un ciclo manualmente ..." :) – Kemo

+1

Sí, y como sugerí en el comentario a la publicación de Alix, habría ofrecido su solución si hubiera sabido al respecto. –

+1

¿Por qué esto ha recibido un voto negativo? –

-4

¿Hay alguna razón por la que no puede hacer lo siguiente?

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

Sí, porque en realidad no sé cuántos elementos hay en la matriz. El ejemplo anterior se redujo a dos elementos para hacerlo más claro. – acme

0

Alix Axel tiene la mejor respuesta. También puede aplicar nada a la matriz aunque con array_map como ...

//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); 

Disfrute

Cuestiones relacionadas