创建一个接受参数并传递变量的函数

时间:2014-01-11 14:37:48

标签: php arrays function variables global-variables

我正在创建一个脚本,它将在文本文件中找到一个字段并获取我需要的值。

首先使用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;
    ?>

我认为我通过在main中设置值然后在函数中将它们设置为全局来覆盖范围。我觉得我很亲密,但我只是缺少一些东西。 我觉得应该有类似return $key,$val;的东西,但这不起作用。我可以返回一个数组,但最后我会输入与数组中的信息一样多的代码。

我遗漏了函数和函数参数。我想传递和参数示例:get_plr_data2($Character_Name);参数标识我们从中获取数据的行。

对此的任何帮助都将非常感激。

::更新::

感谢我通过数组传递的答案。

但我的问题取决于我在get_plr_data2($arg)中放置的参数数量值不同。

我认为我可以设置我可以获得的最大num值,但这当然不起作用,因为我最终得到了未定义的偏移量。

$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);修改或添加更多值来创建我需要的偏移量。或者更好的选择是,如果有一种方法可以生成返回数组(),那么它可以为数组提供的值的数量并返回所需的所有值。我想也许我只是让它变得比现在困难得多。

再次感谢所有帮助和建议

3 个答案:

答案 0 :(得分:0)

你可以用双向方式做到这一点

  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);

    你对$ key函数做了什么,它会影响主函数$ key

答案 1 :(得分: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);

答案 2 :(得分: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;
}

这个社区的全新,感谢所有的耐心。