PHP 内爆不适用于大数组?

标签 php arrays limit implode

我有一个包含 30k 项的数组,内爆不返回任何内容。没有错误消息,没有内存问题,什么都没有。

如果我使用 array_slice 并将数组切片为 100 个项目,它工作正常。它也适用于 7k 阵列,但不适用于这个阵列。

然而,在another topic我找到了这段代码,它工作得很好:

$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 我不能在我的选择中使用它,字符串需要用 ',' 分隔。

所以我有两个问题:有什么方法可以让它工作吗?我怎样才能捕捉到这个错误?因为测试内爆输出不起作用,is_null、strlen、is_string、empty、isset,所有这些测试都失败了。

最佳答案

编辑:写完这个答案后的 Facepalm 时刻,添加了一个 for 循环来制作? marks 似乎并不比仅使用它来输出数据更好。不管怎样,我想你可以试试

<?
 $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 />";
}
?>

关于PHP 内爆不适用于大数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015299/

相关文章:

php - 为什么这个 svg 在不同的上下文中呈现不同的效果?

php - 使用 UTF-8 编码将数据从 MySQL 导出到 Excel

java - 无法在java中打印字符数组?可能编码?

docker - 删除Docker limit-cpu、limit-memory、保留cpu和内存

php - 通过函数将 PHP 变量传递给 JavaScript

javascript - 如何根据当前时间禁用时隙

python - 如何修改字节数组?

c++ - 创建一个可以像 Vector of Vectors 一样工作的 C++ 模板类

sql - 如何限制 Sybase 中返回的结果数量?

MySQL:如何创建模糊LIMIT?