PHP: Каков наилучший способ поиска по значениям? - PullRequest
1 голос
/ 22 июля 2011

Я не уверен, что лучший и быстрый способ поиска по значениям.

У меня есть контрольный список до 20 идентификаторов, которые выглядят как в примере ниже.Но они также могут храниться в виде массива.

'6e0ed0ff736613fdfed1c77dc02286cbd24a44f9','194809ba8609de16d9d8608482b988541ba0c971','e1d612b5e6d2bf4c30aac4c9d2f66ebc3b4c5d96'....

Далее я получу другой набор элементов из вызова json api в качестве php stdclass.Когда я зацикливаюсь на этих элементах, я добавляю html для каждого элемента, чтобы отобразить его на моем веб-сайте.Если один из идентификаторов элемента совпадает с идентификаторами в контрольном списке, то я бы добавил другой html

. Я делаю все это с помощью вызова ajax, так каков наилучший и наиболее эффективный способ поиска в этом контрольном списке?

например

    //get a list of ids from DB and store in $checklist

$checklist;

$data = file_get_contents($url);
    $result = json_decode($data, true);

foreach ( $result->results as $items )
    {
        $name = $items->name;
        $category = $items->category;
        $description = $items->description;
        $id = $items->id;

        // if ID is in $checklist then use blue background.
        $displayhtml .="<div style=\"background-color: white;\">";  
        $displayhtml .="<h3>".$name."</h3>";
        $displayhtml .="<p>".$description."</p>";
        $displayhtml .="</div>";

    }

Спасибо.

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Я бы создал 2 массива из обоих наборов и использовал бы array_intersect () для извлечения перекрывающихся идентификаторов

http://www.php.net/manual/en/function.array-intersect.php

$array1 = array(123,234,345,456,567);
$array2 = array(321,432,345,786,874);
$result = array_intersect($array1, $array2);

// Results in: $result = array( 345 )
3 голосов
/ 22 июля 2011

Простой способ (если вы используете PHP для этого) - использовать in_array()

$checklist = array(
    '6e0ed0ff736613fdfed1c77dc02286cbd24a44f9',
    '194809ba8609de16d9d8608482b988541ba0c971',
    'e1d612b5e6d2bf4c30aac4c9d2f66ebc3b4c5d96',
    'etc.'
);
foreach ($items as $id) // $items are a similar array of ids you're checking
{
    if ( ! in_array($id, $checklist))
    {
        // not in the checklist!
    }
}

По вашему примеру:

foreach ( $result->results as $items )
{
    $name = $items->name;
    $category = $items->category;
    $description = $items->description;
    $id = $items->id;

    // if ID is in $checklist then use blue background.
    if (in_array($id, $checklist))
    {
        $bg = 'blue';
    }
    else
    {
        $bg = 'white'
    }
    $displayhtml .='<div style="background-color: '.$bg.';">'; 
    $displayhtml .="<h3>".$name."</h3>";
    $displayhtml .="<p>".$description."</p>";
    $displayhtml .="</div>";

}

Есть более элегантные способы справиться с этим, но вы не просили переписать. Лично для начала я бы добавил класс CSS вместо встроенного стиля, но, надеюсь, это заставит вас двигаться вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...