[英]Wrong dataype for in_array
早上好。
我正在嘗試為我的一個腳本構建一個非常基本的緩存系統。 緩存是JSON數據,只包含1個密鑰及其值,但是包含許多單獨的字段,如下所示;
{"Item1":"Item1 Description"}
{"Item2":"Item2 Description"}
{"Item3":"Item3 Description"}
我打算做的是;
存儲的所有數據都是字符串。 緩存文件不存儲任何其他類型的數據。
我已經整理了一個基本的功能,但是我無法讓它運轉起來;
function ItemIsInCache($CacheFile, $ItemId) {
if(file_exists($CacheFile)) {
$json = json_decode(file_get_contents($CacheFile, true));
if(in_array($ItemId, $json)) { // <<
$itemname = array_search($ItemId, $json);
return itemname;
} else {
$item[$itemId] = GrabItemName($ItemId);
$itemname = array_search($ItemId, $json); // <<
return $itemname;
}
} else {
$item[$ItemId] = GrabItemName($ItemId);
$ejson = json_encode($item);
file_put_contents($CacheFile, $ejson);
return $item[$ItemId];
}
}
筆記
GrabItemName
是一個不同的函數,它根據$ItemId
返回描述數據。
我得到的警告是array_search()
和in_array()
Wrong datatype for second argument
分別在第4行和第9行(這些是上面代碼中的行號 - 由於我的腳本的性質,這些數字是稍后) - 為簡單起見,我用// <<
標記問題行。
該函數在循環中運行,我沒有遇到任何問題。 問題在於這個功能。
目前發生了什么
現在,如果緩存不存在,它會創建它並將循環中的第一個項添加到緩存文件中,其中包含相應的JSON格式(由於緩存文件不存在而觸發,因此在最后的else
語句之后) 。
但是,之后循環中的項目不會被添加,大概是因為文件存在且代碼有問題。
函數的最后一部分完全按照我的要求工作,但第一部分卻沒有。
使用固定代碼的預期行為
如果項目存在,則檢查緩存>返回描述ELSE將新項目添加到緩存。
這些項目及其相關描述不會改變,但我會從速率有限的API中提取它們,我需要確保盡可能地為每個人的利益緩存。
那么,任何想法我在做什么錯誤的功能? 我敢肯定這是一件令人難以置信的簡單事情。
對於erray,您的文件不是JSON。 數組的正確JSON是
[
{"Item1":"Item1 Description"},
{"Item2":"Item2 Description"},
{"Item3":"Item3 Description"}
]
你錯過了數組周圍的括號,所以你只得到一個對象。
創建初始文件時,您需要執行以下操作:
$ejson = json_encode(array($item));
這樣它就被初始化為一個項目的數組,而不僅僅是一個項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.