扫描.text中的行以获取特定值

时间:2012-11-11 17:08:11

标签: php

  

可能重复:
  how to extract data from csv file in php

我最近收到的一项任务要求我做一个模拟交友网站。提供了很多工作,我所需要的就是编写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等),然后将每个字符串爆炸()成一个数组,所以我有一堆数组。然后我可以按顺序搜索每个数组以匹配性别,年龄范围等。我只是缺少PHP必须提供的功能百科全书,以确切知道该做什么。

2 个答案:

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

答案 1 :(得分:0)

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

$arrDating = array();
foreach($matchespre as $line) {
    array_push($arrDating, explode(',', $line) );
}