0

可能重复:
如何从 php 中的 csv 文件中提取数据

我最近收到的一项任务要求我制作一个模拟约会网站。提供了很多工作,而我所需要的就是编写 PHP。我坚持的部分是关于在 .txt 文件(已经输入的名称数据库)中查找查询名称和名称之间的“匹配”。文本文件如下所示:

Jenny,F,28,INTJ,Gentoo,18,30
Michael,M,22,ISTJ,Windows,20,25
...
Name,Gender,Age,Personality,OS,minage,maxage

我正在使用的页面提示我输入一个名字(.txt 文件中的一个人的名字),然后找到潜在的匹配项。“匹配”是具有以下所有条件的任何人:相反的性别,在他们各自的年龄范围内,共享至少两个性格类型的字母(例如,ISTP + ESFP = 匹配),以及最喜欢的操作系统。然后它以 HTML 格式显示匹配项,这是我能够做到的。

我的问题是我不完全确定如何交叉引用文本文件。我最初认为我应该将 .txt 的每一行放入更大数组的数组元素中:

<?php
    //Initialize the contents of the url (.php?name=$$$) into a variable $inputname
    $inputname = $_GET["name"];
    //Finds how many lines in the singles.txt file
    $lines = count(file("./singles.txt"));
    //Initialize each line into an array
    $matchespre = file("./singles.txt");
?>

...但我不确定如何搜索特定字符(INTJ、M、30、40 等)。

如何获得我想要的结果?如果很难理解我的最终目标是什么,我很抱歉,这个问题本身很难理解(在我看来)。显然我缺乏发布图片的声誉,否则我会截屏发布作业问题本身。

编辑; 我想也许我正在寻找一种将 .txt 的每一行放入一个字符串的方法(例如 string1 = Jenny,F,28,INTJ,Gentoo,18,30; string2 = Michael,M,22, ISTJ、Windows、20、25 等),然后将每个字符串explode() 成一个数组,所以我有一堆数组。然后,我可以按顺序搜索每个数组以查找匹配的性别、年龄范围等。我只是缺乏 PHP 必须提供的函数百科全书,无法确切知道该做什么。

4

2 回答 2

2

如果所有值的顺序相同,您可以愉快地将它们放入一个数组中并对其进行排序以获得适当的值,只需创建一个数组并循环遍历这些行...

// Jenny,F,28,INTJ,Gentoo,18,30

// make an array to put your values in
$array = array();

// loop through the lines
foreach($text as $line) {
  $values = $explode(",",$line);
  $array[]['name'] = $values[0];             // Jenny
  $array[]['gender'] = $values[1];           // F
  $array[]['age'] = $values[2];              // 28
  $array[]['whatever_that_is'] = $values[3]; // INTJ
  $array[]['operating_system'] = $values[4]; // Gentoo
  $array[]['min_age'] = $values[5];          // 18
  $array[]['max_age'] = $values[6];          // 30
}

抱歉,您可能想寻找符合条件的人...!

// search for the gender in your array
// set the gender you are looking for
$gender = "M";
// make a new array
$nameArray = array();

// loop through your other array
foreach($array as $fieldArr) {
  if($fieldArr['gender'] = $gender;) {
    // echo or add that person to another array,
    //or whatever you want to do
    echo $fieldArr['name'] . "<br />\n";
  }
}
于 2012-11-11T17:21:00.620 回答
0

我会将每一行分成单个参数:

$arrDating = array();
foreach($matchespre as $line) {
    array_push($arrDating, explode(',', $line) );
}
于 2012-11-11T17:20:23.493 回答