2015-10-14 85 views
-2

我有一個mySQL查詢來從一整年中獲取數據:$allYearData = $stmt->fetchAll();
現在我想將此數組拆分爲12個部分,按月分隔。
preg_grep()期望參數2是數組,空給出

UPDATE
所以我$allYearData數行:

//Count all keys 
$allYearDataCount = Count($allYearData); 

現在我用PHP preg_grep()進行搜索,並把結果在新陣列$janData

for($i = 0; $i <= $allYearDataCount; $i++){ 
    $janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]); 
} 

結果:
preg_grep() expects parameter 2 to be array, null given

如果我檢查$allYearData數據,我可以看到it's滿。

$allYearData = $stmt->fetchAll(); 
print_r($allYearData); 

Array ([0] => Array ([id] => 7811 [objekt_element] => 23050-121-1_3105 [objekt_nr] => 23050-121-1 [element_nr] => 3105 [vart] => B.Avf [vem] => Blå [anteckn] => [datum] => 2015-09-29 18:00:19) [1] => Array ([id] => 7812 [objekt_element] => 23050-121-1_3107 [objekt_nr] => 23050-121-1 [element_nr] => 3107 [vart] => B.Avf [vem] => Blå [anteckn] => [datum] => 2015-09-29 18:00:22) [2....

我到底做錯了什麼?

+0

你確定你是調用'$ allYearData = $ stmt->使用fetchall();使用了'$ allYearData'迭代之前' 'for'循環? –

回答

1
for($i = 0; $i <= $allYearData; $i++){ 
    $janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]); 
} 

首先,你必須$ I < = $ allYearData,所以allYearData是數或數組?循環應該有一個整數。改用count($ allYearData)。而不是< =但是<。

其次,使用foreach循環,所以你將不會有計數項目的問題。或者在使用之前三思。

+0

我用'count'更新了我的問題。我還刪除了'='。現在循環運行順利。謝謝。我也會看看'foreach'。現在我有一個新問題。 '$ janData'包含與'allYearData'相同的值。過濾器循環不起作用... –

+1

- 是regexp中的一個特殊字符,因此而不是/^2015-01-.*$/,請嘗試使用: /^2015\-01\-.*$/ – Daimos

1

你必須改變

for($i = 0; $i <= $allYearData; $i++){ 

for($i = 0; $i < $allYearData; $i++){ 

,因爲你的陣列開始於指數0,將與指數count($allYearData)-1結束。

在你的代碼訪問的數組索引出界讓$allYearData[$i]nullfor循環的最後一次迭代。

1

在此代碼$allYearData[$i]必須是數組。如果您將查找錯誤preg_grep() expects parameter 2 to be array, null given,那麼需要2個參數,並且您已給出但最後一個參數不是數組,並且它是必需的,因此它假定null最後一個參數。你必須檢查你的循環,並確保第二個參數是Array數據類型

for($i = 0; $i < $allYearData; $i++){ 
    $janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]); 
} 
相關問題