0

文字列の入力を持つ小さなアプリケーションを構築しています。単語の配列もあり、配列内の完全な値が入力文字列と部分的に一致する場合に一致させたいと考えています。例:

Array('London Airport', 'Mancunian fields', 'Disneyland Florida') 

ユーザーが「米国フロリダ州ディズニーランド」または単に「米国フロリダ州ディズニーランド」と入力した場合、一致を返したいと思います。

どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

1

検索するデータ:

<?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

于 2013-07-29T17:43:56.133 に答える
0
function isInExpectedPlace($inputPlace) {
    $places = array('London Airport', 'Mancunian fields', 'Disneyland Florida');
    foreach($places as $place) {
        if(strpos($inputPlace, $place) !== false)
            return true;
        }
    }
    return false;
}
于 2013-07-29T17:22:25.403 に答える
0

無名関数を使用するための 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);
于 2013-07-29T17:43:14.737 に答える