2014-02-25 40 views
6

我有一個包含30k項目的數組,implode不返回任何內容。沒有錯誤信息,沒有內存問題,只是沒有。PHP implode不適用於大數組?

如果我使用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我不能使用我的選擇,該字符串需要由被分隔「」。

所以我有兩個問題:有沒有什麼辦法,使這項工作,我怎麼能抓住這個錯誤?由於測試implode輸出不起作用,is_null,strlen,is_string,empty,isset,所有這些測試都失敗。

+1

有沒有在你的錯誤日誌什麼? –

+2

「*我不能在我的選擇中使用*」。爲什麼?怎麼了?它彈出一個錯誤?空白頁?你的瀏覽器關閉了嗎?你的服務器是否開始刻錄? Apache服務停止了嗎?它是否開始發送垃圾郵件?也就是說,你不應該這樣做。您爲每個請求生成至少* 3.91 MB('(50000 * 82)/ 1024/1024')更多內容。例如 – h2ooooooo

+0

具有項目號碼。 7k1在它的字符串中是一個qoute? 是urlencoded的一切嗎? addslashes()例如... 還是它打破陣列! –

回答

1

編輯:寫這個答案,添加一個循環,使後捂臉時刻?標記似乎並不比使用它來輸出數據更好。無論如何,我想你可以嘗試

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

同時檢查數據庫錯誤..你可以通過你的數組中的一些數據,是不正確的要創建無效SQL。 – ladieu