【问题标题】:possible limitation of implode function in PHPPHP中内爆函数的可能限制
【发布时间】:2012-12-12 18:06:44
【问题描述】:

我的以下代码未按预期返回。我希望最终结果是一个字符串:

$organizers = array_unique($organizers);     // this returns correctly
$organizers = implode(', ', $organizers);    // this returns nothing
var_dump($organizers);                        // no data appears here
exit;

array_unique() 函数正确返回数据,我可以看到它返回的数组。首先,$organizers 数组是一个简单的一维字符串数组,所有字符串的长度都小于 20 个字符。我认为问题可能在于$organizers 的索引长度超过 10,000 个。可以内爆的数组的长度是否有限制?有解决办法吗?我在手册中找不到任何东西,但我已经彻底测试了这段代码,我相信错误一定是在implode()

【问题讨论】:

  • 在您的implode() 之后添加一些调试输出。你只是内存不足吗?你有登录错误吗?
  • @jakenoble,PHP 将字符串视为二进制数据。 “奇数字符”与 PHP 字符串函数无关。
  • 我运行这个没有问题:ideone.com/CYNcAy(它是一个包含 15000 个元素的数组,每个元素都是一个正好有 23 个字符的字符串)
  • 我将 NullUserException 的测试推向了一个更大的极端:100,000 个元素,每个元素为 32 个字符,there was no limitation
  • @nick 我喜欢$entry = 'some small string under 20 chars' 32 个字符的长度 :)

标签: php arrays string implode array-unique


【解决方案1】:

我不知道是否有限制,但我想到的是你也在将数组转换为字符串。这应该不是 PHP 中的问题,但是尝试将其称为 implode 的结果的不同变量?

$organizers        = array_unique($organizers);     // this returns correctly
$organizers_string = implode(', ', $organizers);    // this returns nothing

// This gives it a different space 

【讨论】:

    【解决方案2】:

    编辑:如果由于某种原因 implode() 仍然存在问题。

    $organizers = array_unique($organizers);
    $neworganizers = "";
    for($i = 0; $i < sizeof($organizers); $i++)
    {
        $neworganizers .= $organizers[$i];
        if($i != sizeof($organizers) - 1)
        {
            $neworganizers .= ", ";
        }
    }
    

    //$neworganizers 现在等价于 .implode() 在 $organizers 上调用时应返回的内容

    $organizers = array();
    $organizers[0] = "value1";
    $organizers[1] = "value2";
    $organizers[2] = "value3";
    $organizers[3] = "value3";
    $organizers = array_unique($organizers);     // strips out last index
    $organizers = implode(', ', $organizers);    // returns string of "value1, value2, value3"
    echo $organizers;
    

    这似乎适用于 writecodeline.com/php/

    当我尝试通过其中包含特殊字符的字符串进行爆炸/内爆时,我也遇到了旧 php 构建的问题,并且它们被单引号封装。我知道这听起来很疯狂,但在某些服务器上可能需要使用双引号。

    参考:在旧生产服务器上工作的个人经验。

    【讨论】:

    • 让我们知道它是否有效。也许如果您仍然遇到内爆问题,您可以看到我将在上面进行的编辑。
    【解决方案3】:

    我不想认为我在陈述显而易见的事情,但 implode 不只将字符串作为参数吗?也许它应该更像这样......

    $organizers = array_unique($organizers);
    
    //I'm guessing what you wanted was an array of arrays?
    $neworganizers = array();
    for($i = 0; $i < sizeof($organizers); $i++)
    {
        $neworganizers[$i] = implode(", ", $organizers);
    }
    print_r($neworganizers);
    

    【讨论】:

    • 对不起!现在还早,我对爆炸感到困惑/混淆。
    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多