【问题标题】:How to cast array elements to strings in PHP?如何在 PHP 中将数组元素转换为字符串?
【发布时间】:2011-01-09 01:01:04
【问题描述】:

如果我有一个包含对象的数组:

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

(每个对象都有一个__toString()-方法)

如何将所有数组元素转换为字符串,以便数组$a 不包含更多对象,只包含它们的字符串表示形式?是否有单行或我必须手动循环遍历数组?

【问题讨论】:

标签: php string arrays casting


【解决方案1】:

单行:

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

参见 PHP 文档:

array_map

strval

【讨论】:

    【解决方案2】:

    未测试,但应该这样做吗?

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

    【讨论】:

    • 阅读问题,它说“是否有单行或我必须手动循环...”:)
    • 是的,正如我在对 Alix 帖子的评论中所建议的那样,如果我知道的话,我会提供他的解决方案。
    【解决方案3】:

    你在找implode吗?

    $array = array('lastname', 'email', 'phone');
    
    $comma_separated = implode(",", $array);
    
    echo $comma_separated; // lastname,email,phone
    

    【讨论】:

    • 不,因为我的数组由对象组成,而不是字符串。结果应该是一个数组而不是一个内爆字符串。
    【解决方案4】:

    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】:

      我现在不能测试它,但是你能检查一下当你implode()这样一个数组时会发生什么吗? _toString 应该被调用。

      【讨论】:

      • 确实如此。简单的implode($array) 就可以了。
      • @Gordon:虽然它会将所有字符串合并为一个,但我认为 OP 希望将__toString() 生成的字符串保留在相应的数组元素中。
      • 对,我希望数组保持完整,并且只有其中的元素转换为字符串。
      • @Alix 哦,我明白了。是的。然后内爆就不行了。
      • @nikc:如果生成的__toString() 包含,,则不会。
      【解决方案6】:

      你有什么理由不能做以下事情吗?

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

      【讨论】:

      • 是的,因为实际上我不知道数组中有多少个元素。上面的示例只是简化为两个元素以使其更加清晰。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多