Самый эффективный способ проверить, существует ли элемент матрицы в последовательности

Я искал способ проверить, существует ли какое-либо множество ценностей в последовательности, но кажется, что у PHP нет родного способа сделать это, таким образом, я придумал ниже.

Моим вопросом - является там лучший способ сделать это, поскольку это кажется довольно неэффективным? Спасибо.

$match_found = false;
$referer = wp_get_referer();
$valid_referers = array(
    'dd-options',
    'dd-options-footer',
    'dd-options-offices'
);

/** Loop through all referers looking for a match */
foreach($valid_referers as $string) :

    $referer_valid = strstr($referer, $string);
    if($referer_valid !== false) :
        $match_found = true;
        continue;
    endif;

endforeach;

/** If there were no matches, exit the function */
if(!$match_found) :
    return false;
endif;
0
@Yoshi - Хорошее пятно, на котором благодарит - erro в моей части в не изменении, чтобы разрыв; после более ранней попытки!
добавлено автор David Gard, источник
@Yoshi - Хорошее пятно, на котором благодарит - erro в моей части в не изменении, чтобы разрыв; после более ранней попытки!
добавлено автор David Gard, источник
Что содержит $referer переменная?
добавлено автор hsz, источник
продолжаются; не имеет большого смысла, поскольку больше нет кода в петле, которая могла быть пропущена. Если вы только хотите знать, есть ли по крайней мере один матч, используйте разрыв; вместо этого. Таким образом, петля остановится на первом матче.
добавлено автор Yoshi, источник
продолжаются; не имеет большого смысла, поскольку больше нет кода в петле, которая могла быть пропущена. Если вы только хотите знать, есть ли по крайней мере один матч, используйте разрыв; вместо этого. Таким образом, петля остановится на первом матче.
добавлено автор Yoshi, источник
В вашем foreach - вы хотите разрыв , как только вы нашли первый ссылающийся домен соответствия (а не продолжают ).Edit: избитый Yoshi:)
добавлено автор Sim, источник
В вашем foreach - вы хотите разрыв , как только вы нашли первый ссылающийся домен соответствия (а не продолжают ).Edit: избитый Yoshi:)
добавлено автор Sim, источник
вы хотите точные совпадения или частичные матчи?
добавлено автор Khez, источник
вы хотите точные совпадения или частичные матчи?
добавлено автор Khez, источник

6 ответы

Попытка со следующей функцией:

function contains($input, array $referers)
{
    foreach($referers as $referer) {
        if (stripos($input,$referer) !== false) {
            return true;
        }
    }
    return false;
}

if ( contains($referer, $valid_referers) ) {
 //contains
}
3
добавлено
Думайте I' ll идут для чего-то как этот. Спасибо за предложение.
добавлено автор David Gard, источник

Попытка со следующей функцией:

function contains($input, array $referers)
{
    foreach($referers as $referer) {
        if (stripos($input,$referer) !== false) {
            return true;
        }
    }
    return false;
}

if ( contains($referer, $valid_referers) ) {
 //contains
}
3
добавлено
Думайте I' ll идут для чего-то как этот. Спасибо за предложение.
добавлено автор David Gard, источник

Что относительно этого:

$exists = true;
array_walk($my_array, function($item, $key) {
    $exists &= (strpos($my_string, $item) !== FALSE);
});
var_dump($exists);

Это проверит, существует ли какая-либо из ценностей множества в последовательности. Если только один отсутствует, Вам дают , ложный ответ. Если необходимо узнать, какой не присутствуют в последовательности, попробуйте это:

$exists = true;
$not_present = array();
array_walk($my_array, function($item, $key) {
    if(strpos($my_string, $item) === FALSE) {
        $not_present[] = $item;
        $exists &= false;
    } else {
        $exists &= true;
    }
});
var_dump($exists);
var_dump($not_present);
0
добавлено

Что относительно этого:

$exists = true;
array_walk($my_array, function($item, $key) {
    $exists &= (strpos($my_string, $item) !== FALSE);
});
var_dump($exists);

Это проверит, существует ли какая-либо из ценностей множества в последовательности. Если только один отсутствует, Вам дают , ложный ответ. Если необходимо узнать, какой не присутствуют в последовательности, попробуйте это:

$exists = true;
$not_present = array();
array_walk($my_array, function($item, $key) {
    if(strpos($my_string, $item) === FALSE) {
        $not_present[] = $item;
        $exists &= false;
    } else {
        $exists &= true;
    }
});
var_dump($exists);
var_dump($not_present);
0
добавлено

Сначала, дополнительный синтаксис хорош использовать, но исторически он используется в файлах шаблона. Так как это - структура, легко удобочитаемое в то время как coupling/decouping переводчик PHP, чтобы интерполировать данные о HTML.

Во-вторых, вообще мудро, если весь ваш код делает должен проверить что-то, чтобы немедленно возвратиться, если то условие соблюдают:

$match_found = false;
$referer = wp_get_referer();
$valid_referers = array(
    'dd-options',
    'dd-options-footer',
    'dd-options-offices'
);

/** Loop through all referers looking for a match */
foreach($valid_referers as $string) :

    $referer_valid = strstr($referer, $string);
    if($referer_valid !== false) :
        $match_found = true;
        break;//break here. You already know other values will not change the outcome
    endif;

endforeach;

/** If there were no matches, exit the function */
if(!$match_found) :
    return false;
endif;

// if you don't do anything after this return, it's identical to doing return $match_found

Теперь, как определено некоторыми из других постов в этой нити. У PHP есть много функций, которые могут помочь. Вот пара больше:

in_array($referer, $valid_referers);// returns true/false on match

$valid_referers = array(
    'dd-options' => true,
    'dd-options-footer' => true,
    'dd-options-offices' => true
);// remapped to a dictionary instead of a standard array
isset($valid_referers[$referer]);// returns true/false on match

Спросите, есть ли у вас какие-либо вопросы.

0
добавлено
Thaks для предложения. Я правилен в интеллектуальной мысли, что in_array() только проверит, что $referrer точно выполнил одну из ценностей в $valid_referers ? Если так, это won' t работа, поскольку $referer - ссылающийся домен HTTP (так HTTP:/ / www.somting.com/ страница? referrer=dd-options&page_id=65 , например).
добавлено автор David Gard, источник
in_array , строгая функция сравнения. Таким образом да, it' s игла должно быть точно равно ценности пункта от множества. Также I' m сомнительный, какой wp_get_referer делает. I' m предполагающий it' s функция Wordpress, но that' s об этом. Можно получить его в примере с $referer=$ _GET [' referrer'] . Это только 3 действительных варианта?
добавлено автор Khez, источник

Сначала, дополнительный синтаксис хорош использовать, но исторически он используется в файлах шаблона. Так как это - структура, легко удобочитаемое в то время как coupling/decouping переводчик PHP, чтобы интерполировать данные о HTML.

Во-вторых, вообще мудро, если весь ваш код делает должен проверить что-то, чтобы немедленно возвратиться, если то условие соблюдают:

$match_found = false;
$referer = wp_get_referer();
$valid_referers = array(
    'dd-options',
    'dd-options-footer',
    'dd-options-offices'
);

/** Loop through all referers looking for a match */
foreach($valid_referers as $string) :

    $referer_valid = strstr($referer, $string);
    if($referer_valid !== false) :
        $match_found = true;
        break;//break here. You already know other values will not change the outcome
    endif;

endforeach;

/** If there were no matches, exit the function */
if(!$match_found) :
    return false;
endif;

// if you don't do anything after this return, it's identical to doing return $match_found

Теперь, как определено некоторыми из других постов в этой нити. У PHP есть много функций, которые могут помочь. Вот пара больше:

in_array($referer, $valid_referers);// returns true/false on match

$valid_referers = array(
    'dd-options' => true,
    'dd-options-footer' => true,
    'dd-options-offices' => true
);// remapped to a dictionary instead of a standard array
isset($valid_referers[$referer]);// returns true/false on match

Спросите, есть ли у вас какие-либо вопросы.

0
добавлено
Thaks для предложения. Я правилен в интеллектуальной мысли, что in_array() только проверит, что $referrer точно выполнил одну из ценностей в $valid_referers ? Если так, это won' t работа, поскольку $referer - ссылающийся домен HTTP (так HTTP:/ / www.somting.com/ страница? referrer=dd-options&page_id=65 , например).
добавлено автор David Gard, источник
in_array , строгая функция сравнения. Таким образом да, it' s игла должно быть точно равно ценности пункта от множества. Также I' m сомнительный, какой wp_get_referer делает. I' m предполагающий it' s функция Wordpress, но that' s об этом. Можно получить его в примере с $referer=$ _GET [' referrer'] . Это только 3 действительных варианта?
добавлено автор Khez, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp