>我有一个名为"single.txt"的文件。内容如下所示:
Array ( [0] => Ada Lovelace,F,96,ISTJ,Linux,24,99
[1] => Adele Goldberg,F,65,ENFJ,Windows,50,70
[2] => Alan Turing,M,41,ESTP,Mac OS X,31,50...
)
首先,当新人注册时,它会将他们及其信息添加到.txt文件的末尾。我希望能够检查他们是否已经注册,并且我已经编写了以下函数:
function returnPerson($content){
global $person_name;
for($i=0 ; $i < count($content); $i++){
if($person_name == array_slice($content,0,0)){
$person = $content[$i];
return $person;
} else continue;
}
}
但这似乎不起作用。
如何将字符串的第一部分(即名称部分)与检查人员的姓名进行比较?
谢谢!
试试这样的事情...您可能需要根据文本的输入方式稍微修改它,但应该可以让您走上正确的轨道:)
function returnPerson($content){
global $person_name;
foreach($content as $profile) {
$profile = explode(',', $profile);
if ($person_name == $profile[0]) {
// Person Exists
return $profile;
}
}
return false; // person does not exist
}
你在循环时"切片"同一个数组。看起来您只需要一个简单的strpos()
:
if(strpos($content[$i], $person . ',') === 0){
return ...
}
这是另一种不需要for
循环的方法:
$names = array_map('reset', array_map('str_getcsv', $content));
if(in_array($person, $names)){
...
}
它之所以有效,是因为您的数据似乎使用了CSV格式
您可以像这样遍历数组中的元素:
foreach ($content as $record) {
// $record now contains string "Ada Lovelace,F,96,ISTJ,Linux,24,99"
}
您可以使用 explode() 函数从逗号分隔的字符串中提取字段:
$string = "Ada Lovelace,F,96,ISTJ,Linux,24,99";
$fields = explode(',', $string);
// $fields[0] now contains "Ada Lovelace"
// $fields[1] now comtains "F"
// ... etc
将它们放在一起,你会得到类似的东西:
foreach ($content as $record) {
$fields = explode(',', $record);
if ($fields[0] == $name_to_check) {
// found it
}
}
// didn't find it