搜索多维数组以查找匹配的任何值

时间:2017-08-25 22:05:52

标签: php multidimensional-array array-filter

我有一个打开并放在数组中的csv文件

csv文件的例子:

Steven King, IT

Ronald Dahl, BFG

Charles Abbot, The island

因此,这会为每个艺术家等创建具有不同键的数组。我使用下面打开我的csv文件:

$file = fopen('./example.csv','r') or die("can't open file");
while (($line = fgetcsv($file, 1000)) !== false) {
    $csv[] = $line;
    }
fclose($file) or die("can't close file");

哪个工作正常,但我正在努力搜索所有数组以查找用户搜索的任何值;我的表单发布用户字符串并在数组中搜索与用户输入的内容相匹配的任何值(不区分大小写)。即:

//gets the users input from form
$user_string = $_POST['search_string'];

让我们说用户输入stephen或island,我试图让它在$ csv数组中搜索匹配或包含该字符串的任何值,并输出该键上的所有值。我尝试过使用array_filter& preg_grep但没有太多运气。

2 个答案:

答案 0 :(得分:0)

我认为在循环中创建$ cvs数组时需要使用数组搜索功能进行确认。您可以在此循环中创建结果。这是一个样本。

<?php

$file = fopen('example.csv', 'r') or die("can't open file");

$results = []; // it'll hide php notifications

$searchword = $_POST['search_string'];

while (($line = fgetcsv($file, 1000)) !== false) {

    $found = false;

    foreach ($line as $var => $val) {
        if (stristr($val, $searchword) || stristr($var, $searchword)) {
            $found = true;
        }
    }

    if ($found == true) {
        $results[] = $line;
    }
}

fclose($file) or die("can't close file");

print_r($results);

答案 1 :(得分:0)

这是一种功能性方法:

$f = array_filter($csv, function($cs) use($user_string){ foreach($cs as $c){return stristr($c,$user_string);}});

由于您可以从csv文件创建数组,只需将该数组传递给array_filter,然后使用foreach遍历每个数组,并使用stristr返回所有值匹配你的搜索针。

$arr = [
 0 => [
  "name" => "Stephen King",
  "movie" => "IT"
  ],
 1 => [
  "name" => "Ronald Dahl",
  "movie" => "BFG"
  ],
2 => [
  "name" => "Charles Abbot",
  "movie" => "The Island"
  ]
];

$n = "Ron";

$f = array_filter($arr, function($ar) use($n){ foreach($ar as $a){return stristr($a,$n);}});

var_dump($f);