2015-11-18 118 views
1

我試圖過濾一些日誌,就像我需要它們,並試圖使其動態。我有一些域名,我試圖從中過濾一些東西,並且它們都像我想要的那樣工作 - 但現在我更改了域名,現在我的代碼不再工作了。它說一個變量沒有被定義。爲什麼PHP告訴我這個變量沒有定義?

 $sp_bots = shell_exec("grep bot | awk '{print $12}' /var/www/laravel/logs/vhosts/zahnmedizinisches-fachzentrum-berlin.de.log"); 
    $array_sp_bots = explode("\n", $sp_bots); 
    $all_bots = array(); 
    foreach($array_sp_bots as $bots){ 
     if(strpos($bots, "bot")){ 
      $all_bots[] = $bots; 
     } 
    } 
    # count values of strings in array 
    if (!empty($all_bots)) { 
     $bots = array_count_values($all_bots); 
     arsort($bots); 
     $mostOccuring = max(array_count_values($all_bots)); 
     $bot_keys = array_keys($bots); 
     #number of total bots 
     $count_bots = count($all_bots); 
    } 

,並在我的回報:

return view('/domains/data', [ 

     'count_bots' => $count_bots, 
     'bot_keys' => $bot_keys, 
     'mostOccuring' => $mostOccuring, 
    ]); 

但在我回報所有三個變量是不確定的..任何人都知道這是爲什麼?

+0

什麼的$更改域後sp_bots輸出? – Sabari

+1

定義$ all_bots,如$ all_bots = array();上面的foreach – Surace

+0

因爲你從來沒有定義'$ all_bots',只是假設當你',它已經存在$ all_bots [] = $機器人;' –

回答

3

您必須初始化數組作爲循環之前的空數組:

$all_bots = array();   //init the empty array 

foreach($array_sp_bots as $bots) 
{ 
    if(strpos($bots, "bot")) 
    { 
     $all_bots[] = $bots; //here you can add elements to the array 
    } 
} 
你的情況

,如果循環將不會執行至少一次,該變量$all_bots將是不確定的

EDIT

循環後,處理的情況下,當數組爲空做財產以後這樣的:

//if there is some element in all_bots... 
if (! empty($all_bots)) 
{ 
    # count values of strings in array 
    $bots = array_count_values($all_bots); 
    arsort($bots); 
    $mostOccuring = max(array_count_values($all_bots)); 
    $bot_keys = array_keys($bots); 
    #number of total bots 
    $count_bots = count($all_bots); 
} 
//handle the case the variable all_bots is empty 
else 
{ 
    $bots = 0; 
    $count_bots = 0; 
    $bot_keys = 0; 
    $mostOccuring = 0; 
} 

EDIT2

您的收益不確定,因爲當所有$all_bots是空的沒有設置他們的變量。檢查我上面的編輯,我已經將它們添加到if語句中。但是你必須根據你的需求在你的應用程序中處理這種情況,這樣想:當$all_bots爲空時,這些變量應該包含什麼?然後,因爲改變它並不在循環中執行域後分配在if語句

+0

是的,因爲你試圖從一個空數組中獲得最大值,請檢查我的編輯 – Moppo

+0

好吧,這工作正常謝謝:)但知道我有問題,它是賽義德:未定義變量:count_bots - 但我在這裏定義它: $ count_bots = count($ all_bots); 是因爲$ all_bots或爲什麼? – Evolution48

+0

奇怪的是'$ count_bots'不能被定義,你在哪裏訪問變量? – Moppo

2

它發生的值的變量。與嘗試 -

$all_bots= array(); // Define an empty array 
foreach($array_sp_bots as $bots){ 
    if(strpos($bots, "bot")){ 
     $all_bots[] = $bots; 
    } 
} 
# count values of strings in array 
$bots = array_count_values($all_bots); 

如果$array_sp_bots爲空,則不會執行循環& $all_bots不會被定義。在這種情況下,計數將是0

或者可能可能要增加一些檢查爲 -

if(empty($all_bots)) { 
    // Some error message 
} else { 
    # count values of strings in array 
    $bots = array_count_values($all_bots); 
    arsort($bots); 
    $mostOccuring = max(array_count_values($all_bots)); 
    $bot_keys = array_keys($bots); 
    #number of total bots 
    $count_bots = count($all_bots); 
} 
+0

謝謝,但現在我得到這個from php:max():數組必須包含至少一個元素 – Evolution48

+0

檢查更新。應該只執行其餘的代碼,而不是空的。 –

+0

IAM回到我的變量,以我的看法,但所有3個變量是不確定的.. 'count_bots'=> $ count_bots, 'bot_keys'=> $ bot_keys, 'mostOccuring'=> $ mostOccuring, – Evolution48

相關問題