我正在创建一个脚本,它将在文本文件中找到一个字段并获取我需要的值。
首先使用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);
修改或添加更多值来创建我需要的偏移量。或者更好的选择是,如果有一种方法可以生成返回数组(),那么它可以为数组提供的值的数量并返回所需的所有值。我想也许我只是让它变得比现在困难得多。
再次感谢所有帮助和建议
答案 0 :(得分:0)
你可以用双向方式做到这一点
您可以返回数组中的两个值
function get_plr_data2($arg){
/* do what you have to do */
$output=array();
$output['key'] =$key;
$output['value']= $value;
return $output;
}
并在主函数中使用数组
您可以使用引用,以便您可以返回多个值
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;
}
这个社区的全新,感谢所有的耐心。