如何在PHP中将数组元素转换为字符串?


74

如果我有一个对象数组:

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

(每个对象都有一个__toString()-method)

如何将所有数组元素都转换为字符串,以便该数组仅$a包含其字符串表示形式,就不包含其他对象?是否有单线排列,还是必须手动遍历阵列?


你看过php.net/array_map吗?
Kemo 2010年


@RohitSuthar:您的链接答案将根据字符串创建一个数组。这个问题是关于将对象数组转换为其字符串表示形式的数组。
acme

Answers:


167

单线:

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

参见PHP DOCS:

array_map

strval

请享用!;)


2
该死,希望我在发布答案之前知道这一点。+1
本·埃弗拉德

2
implode(',',array_map('strval',$ a)); 会很好地完成这项工作
Kemo

2
@Kemo:我认为他不想那样做。
Alix Axel

完美,这就是我想要的!谢谢!
acme 2010年

1
对于多维度数组该如何做?
Yatin Mistry

2

未经测试,但是应该这样做?

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

读了这个问题,它说:“有没有一个内衬,或者我必须手动循环...” :)
Kemo 2010年

1
是的,正如我在Alix帖子的评论中所建议的那样,如果我知道的话,我会提供他的解决方案。
本·埃弗拉德

1

您是否正在寻求内

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

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

echo $comma_separated; // lastname,email,phone

不,因为我的数组由对象而不是字符串组成。结果应该是一个数组,而不是内嵌的字符串。
acme 2012年

0

我现在无法测试,但是您可以检查一下implode()这样的阵列会发生什么吗?_toString应该被调用。


是的 简单implode($array)就能做到。
戈登2010年

1
@戈登:虽然它将所有字符串合并在一起,但我认为OP希望将__toString()生成的字符串保留在相应的数组元素中。
Alix Axel 2010年

是的,我希望数组保持完整,并且仅将其中的元素转换为字符串。
acme 2010年

@Alix哦,我明白了。是。然后内爆就不会了。
戈登2010年

1
@nikc:如果生成的__toString()包含,则不会,
Alix Axel

0

Alix Axel有最好的答案。您也可以使用array_map将任何内容应用于数组,例如...

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

请享用


-5

有什么原因导致您无法执行以下操作?

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

是的,因为实际上我不知道数组中有多少个元素。上面的示例只是简化为两个元素,以使其更加清晰。
acme 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.