PHP implode对于大数组不起作用?

6
我有一个包含3万项的数组,但使用implode函数未返回任何结果。没有错误消息,也没有内存问题,就是完全没有输出。
如果我使用array_slice函数将数组切片到100个项目,那么它可以正常工作,对于7k的数组也可以,但不适用于这个数组。
然而,在另一个话题中,我找到了这段代码,它能够很好地工作:
$arr = array();
for ($i = 0; $i < 50000; $i++) {
$arr[] = str_shuffle('This sentance is of average length, which The Internet says is  aboout 14.2 words.'); 
}
echo implode(PHP_EOL, $arr);

但是使用PHP_EOL无法在我的选择语句中使用,字符串需要用逗号分隔。

所以我有两个问题:有没有办法使这个工作,并且如何捕捉这个错误?因为测试implode输出不起作用,is_null,strlen,is_string,empty,isset,所有这些测试都失败了。


1
你的错误日志里有什么吗? - Dave Child
2
“我不能在我的选择中使用那个。”为什么?会发生什么?会弹出错误吗?是空白页面吗?您的浏览器会关闭吗?您的服务器会开始烧毁吗?Apache服务会停止吗?它会开始发送垃圾邮件吗?话虽如此,您不应该这样做。每个请求至少会生成3.91 MB((50000 * 82)/ 1024 / 1024)的更多内容。” - h2ooooooo
你的数组是多维的吗?如果是,implode函数将无法正常工作。 - Dale
1
@user3351349 你漏了一些逗号吗? - h2ooooooo
2
@user3351349,你在$available_brands_array中的某个值不是一个字符串,而是someClassName类型的类。使用 print_r 找出它是哪个,或使用以下链接:http://pastebin.com/XJHg8dpH - h2ooooooo
显示剩余16条评论
1个回答

1

编辑:写完这篇回答后我意识到加一个for循环来生成问号并没有比直接输出数据更好。不管怎样,你可以尝试一下。

<?
 $questionMarks =implode(',',array_fill(0,sizeof($myarray),'?'));
?>

你可以尝试使用参数化查询来解决这个问题。

看看是否能更加成功地完成操作。

<?php

$db = new PDO(...);

//$myarray is some random sized php array of potential myid values
$questionMarks='';

//check to see if runtime is acceptible for your applicaition
for ($i = 0; sizeof($myarray); $i++)
    $questionMarks=",?";
$questionMarks=substr($questionMarks,1,strlen($questionMarks)-1);

/* you could try implode(',',array_fill(0,sizeof($myarray),'?')) but as you said implode might not work */

$sql = 'select myfield from mytable where myid in ('.$questionMarks.')';
$sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($myarray);
if (!$sth) {
    echo "\nPDO::errorInfo():\n";
    print_r($db->errorInfo());

}  


while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
   echo $row['myfield']  . "<br />";
}
?>

还要检查数据库错误...你可能正在通过数组中的某些不正确的数据创建无效的SQL。 - ladieu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接