簡體   English   中英

PHP未定義的數組查找索引

[英]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.

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