簡體   English   中英

PHP in_array()總是返回false

[英]PHP in_array() always returning false

當我使用in_array()時,PHP總是返回false,並且它是否在數組中並不重要。 例如:

$list = 'test
list
example';
$list_arr = array();
$list_arr = explode("\n",$list);
if (in_array('test',$list_arr)) {
    echo 'Found';
}
else {
    echo 'Not Found';
}

返回'Not Found',即使'test'是數組中的值

$list = 'test
list
example';
$list_arr = array();
$list_arr = explode("\n",$list);
if (in_array('qwerty',$list_arr)) {
    echo 'Found';
}
else {
    echo 'Not Found';
}

返回“未找到”,應該如此

當它應該是真的時,為什么它會返回錯誤? 請提出任何建議。 我實際使用的列表有超過10K的值,因此我在這里縮短了它。

如果您正在使用這個確切的示例並在Windows PC上編碼,則問題來自於Windows使用以下方式存儲換行符:

\r\n

因此,當您在\\ n上拆分時,只有在項目末尾保留一個不可見的\\ r \\ n,因此不匹配。

您的列表實際上由\\r\\n分隔,而不僅僅是\\n

$list_arr = explode("\r\n",$list);

這是將值放入列表的一種非常奇怪的方式。 所以我假設你最終試圖從一個單獨的文件到一個數組。 在這種情況下你會這樣做

file('path/to/file');

將每行讀入單獨的數組項。

引用文件的位置如下:

test
list
example

如果您像在代碼示例中那樣預先知道值,則應該將它們放入數組中而不是從字符串中讀取它們。

如果您只是必須讀取字符串中的值,我建議使用PHP_EOL常量來定義換行符。 像這樣:

$list = 'test' . PHP_EOL . 'list' . PHP_EOL . 'example';
$list_arr = explode(PHP_EOL, $list);

PHP_EOL常量將為您提供一種更好的獨立於平台的方式來獲取定義換行符的值。

如前所述,Windows使用\\ r \\ n作為行尾字符。 Unix使用\\ n而Mac使用\\ r \\ n。 要制作可移植代碼,請使用PHP_EOL常量來展開字符串:

$list_arr = explode(PHP_EOL, $list)

這樣,您確定它始終正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM