[英]PHP undefined index on array lookup
我在文本文件中有一個IP列表。 我想獲取用戶的IP,然后在數組中計數,看看他們是否發出了超過2個請求。
但是我得到了
Undefined index: xx.xxx.xxx.xx
哪里
xx.xxx.xxx.xx is my IP.
(隱藏原因顯而易見)
當我在txt文件中有兩個以上相同的IP時,它返回'Too many lookups',但如果在數組中找不到$值,則返回未定義的索引。 我以為我有抓住了!但是如果我刪除了! 它只是運行請求。 如果我把它保持為!isset它運行但后來返回未定義的索引。
我甚至試過了
if(array_key_exists($value, $array_list)){
但沒什么。 有什么想法嗎?
$list = file_get_contents('ips.txt');
// convert to array
$array_list = (explode(" ",$list));
// Get user's ip
$value = $_SERVER['REMOTE_ADDR'];
if(!isset($array_list[$value])){
$values = array_count_values($array_list);
$count = $values[$value];
if ($count > 2) {
return 'Too many lookup attempts, please try again in 24 hours click <a href="/">HERE</a> to return home';
}
}
else {
// run the ok request
}
看起來你混淆了數組值和數組鍵
Explode返回一個數組,其中字符串中的所有項都是值 ,而鍵只是從0開始的數字。舉個例子:
$string = "foo bar baz";
$array = explode(' ', $string);
/*
* Array now holds
* [0] => "foo",
* [1] => "bar",
* [2] => "baz",
*/
在示例中,0,1,2是鍵 ,foo,bar,baz是值 。
所以當你執行時
// convert to array
$array_list = (explode(" ",$list));
您的密鑰是數字0-n(n是列表中的許多IP)。 每個鍵都有一個對應的值,這些值是實際的IP。
所以現在你跑步的時候
if(!isset($array_list[$value])){
你告訴PHP要做的是在數組中找到一個與你的IP匹配的密鑰 。 除了陣列中沒有鍵是IP地址。
如果要查明數組中是否存在某個值,請使用array_search() 。 或者在你的情況下,因為你通過array_count_values()
運行你的列表, array_count_values()
把你的值轉換成鍵 ,你可以在運行函數后對$ values變量進行正常的isset()
查找。
$values = array_count_values($array_list); // Each IP is now a key of $values
if (isset($values[$value])) {
// The IP shows up at least once
$count = $values[$value];
// continue with other logic here
}
else {
// The IP is not in the list
// continue with other logic here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.