文字列の入力を持つ小さなアプリケーションを構築しています。単語の配列もあり、配列内の完全な値が入力文字列と部分的に一致する場合に一致させたいと考えています。例:
Array('London Airport', 'Mancunian fields', 'Disneyland Florida')
ユーザーが「米国フロリダ州ディズニーランド」または単に「米国フロリダ州ディズニーランド」と入力した場合、一致を返したいと思います。
どんな助けでも大歓迎です。前もって感謝します。
検索するデータ:
<?php
$data = array(
0 => 'London Airport',
1 => 'Mancunian fields',
2 => 'Disneyland Florida'
);
検索機能:
<?php
/**
* @param array $data
* @param string $what
* @return bool|string
*/
function searchIn($data, $what) {
foreach ($data as $row) {
if (strstr($what, $row)) {
return $row;
}
}
return false;
}
結果:
<?php
// Disney Florida
echo searchIn($data, 'Disneyland Florida in USA');
// Disney Florida
echo searchIn($data, 'Disneyland Florida, USA');
// false
echo searchIn($data, 'whatever Florida Disneyland');
echo searchIn($data, 'No match');
echo searchIn($data, 'London');
検索機能:
<?php
/**
* @param array $data
* @param string $what
* @return int
*/
function searchIn($data, $what) {
$needles = explode(' ', preg_replace('/[^A-Za-z0-9 ]/', '', $what));
foreach ($data as $row) {
$result = false;
foreach ($needles as $needle) {
$stack = explode(' ', $row);
if (!in_array($needle, $stack)) {
continue;
}
$result = $row;
}
if ($result !== false) {
return $result;
}
}
return false;
}
結果:
<?php
// Disneyland Florida
echo searchIn($data, 'Disneyland Florida in USA');
// Disneyland Florida
echo searchIn($data, 'Disneyland Florida, USA');
// Disneyland Florida
echo searchIn($data, 'whatever Florida Disneyland');
// false
echo searchIn($data, 'No match');
// London Airport
echo searchIn($data, 'London');
ご覧のとおり、id は、ユーザーが検索する順序や、文字列が で始まるかどうかに関係ありませんDisneyland
。
function isInExpectedPlace($inputPlace) {
$places = array('London Airport', 'Mancunian fields', 'Disneyland Florida');
foreach($places as $place) {
if(strpos($inputPlace, $place) !== false)
return true;
}
}
return false;
}
無名関数を使用するための PHP 5.3+:
<?php
$places = array('London Airport', 'Mancunian fields', 'Disneyland Florida');
$search = 'Disneyland Florida in USA';
$matches = array_filter($places, function ($place) use ($search) {
return stripos($search, $place) !== false;
});
var_dump($matches);