2014-01-11 125 views
2

我正在創建一個腳本,它將在文本文件中找到一個字段並獲取我需要的值。創建一個帶參數並傳遞變量的函數

首先使用file()函數將我的txt逐行加載到數組中。 然後我使用explode()爲選定行上的字符串創建一個數組。 我將標籤分配給數組來描述$ Key和$ Value。

$line = file($myFile); 
$arg = 3 
$c = explode(" ", $line[$arg]); 
$key = strtolower($c[0]); 
if (strpos($c[2], '~') !== false) { 
$val = str_replace('~', '.', $c[2]); 
}else{ 
$val = $c[2]; 
} 

這工作得很好,但是這是一個很大的代碼必須爲一切,我想離開txt文件做了一遍又一遍。所以我想創建一個函數,我可以用一個返回$ key和$ val值的參數來調用它。這是我失敗的地方:

<?php 

    /** 
    * @author Jason Moore 
    * @copyright 2014 
    */ 
    global $line; 
    $key = ''; 
    $val = ''; 
    $myFile = "player.txt"; 
    $line = file($myFile); //file in to an array 
    $arg = 3; 
    $Character_Name = 3 
    function get_plr_data2($arg){ 
    global $key; 
    global $val; 
    $c = explode(" ", $line[$arg]); 
    $key = strtolower($c[0]); 
    if (strpos($c[2], '~') !== false) { 
    $val = str_replace('~', '.', $c[2]); 
    }else{ 
    $val = $c[2]; 
    } 
    return; 
    } 
    get_plr_data2($Character_Name); 
    echo "This character's ",$key,' is ',$val; 
    ?> 

我以爲我覆蓋範圍設置的主要值,然後在函數中設置它們的全局範圍。我覺得我很接近,但我只是想念一些東西。 我覺得應該有像return $key,$val;但這不起作用。我可以返回一個數組,但是最終我會輸入與數組中的信息一樣多的代碼。

我缺少一些功能和函數參數。我想通過參數示例:get_plr_data2($Character_Name);該參數標識我們從中獲取數據的行。

任何與此有關的幫助將不勝感激。

:: Updated:

感謝我過去通過陣列的答案。

但我的問題是取決於我在get_plr_data2($arg)值的數量不同的參數。

我想我可以設置我可以得到的最大值,但是這當然不起作用,因爲我最終得到了未定義的偏移量。

$a = $cdata[0];$b = $cdata[1];$c = $cdata[2]; 
$d = $cdata[3];$e = $cdata[4];$f = $cdata[5]; 
$g = $cdata[6];$h = $cdata[7];$i = $cdata[8]; 
$j = $cdata[9];$k = $cdata[10];$l = $cdata[11]; 
return array($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l); 

現在我想,我可以使用COUNT函數myCount = count($c);要麼修改或添加更多價值創造我所需要的偏移。或者更好的選擇是,如果有一種方法可以生成返回數組(),那麼它可能會爲數組提供的值的數量並返回所需的所有值。我認爲,也許我只是讓這一切變得更加困難。再次

感謝所有幫助和建議

+1

如果你想學習PHP,請省略使用全局。 – Bram

回答

0
function get_plr_data2($arg){ 
    $myFile = "player.txt"; 
    $line = file($myFile); //file in to an array 
    $c = explode(" ", $line[$arg]); 
    $key = strtolower($c[0]); 
    if (strpos($c[2], '~') !== false) { 
    $val = str_replace('~', '.', $c[2]); 
    }else{ 
    $val = $c[2]; 
    } 
    return array($key,$val); 
} 

使用:

list($key,$val) = get_plr_data2(SOME_ARG); 
+0

謝謝你的幫助! – BroKeOne

0

您可以在2路做到這一點

  1. 你可以在陣列中同時返回值

    function get_plr_data2($arg){ /* do what you have to do */ $output=array(); $output['key'] =$key; $output['value']= $value;
    return $output; }

    ,並使用陣列在你的主要功能

  2. 您可以使用引用,這樣就可以返回多個值

    function get_plr_data2($arg,&$key,&$val){ /* do job */
    } //use the function as $key=''; $val=''; get_plr_data2($arg,$key,$val);

    你在功能上做$鑰匙什麼都將會影響到主函數$關鍵

+0

謝謝您的輸入! – BroKeOne

+0

我現在遇到的問題是返回數組,因爲返回值的數量有多種。我會把這個問題放在 – BroKeOne

0

我一直在想它。感謝他們幫助球員們。這是我終於想出了多虧了你的指導:

<?php 

$ch_file = "Thor"; 
$ch_name = 3; 
$ch_lvl = 4; 
$ch_clss = 15; 


list($a,$b)= get_char($ch_file,$ch_name);// 
Echo $a,': ',$b; // Out Puts values from the $cdata array. 

function get_char($file,$data){ 
$myFile = $file.".txt"; 
$line = file($myFile); 
$cdata = preg_split('/\s+/', trim($line[$data])); 
return $cdata; 
} 

這個社區的新品牌,感謝所有的耐心。

相關問題