Как отфильтровать индексы массива sql и отобразить их ...? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть таблица базы данных отчетов о состоянии с именем dsr

, и у нее есть некоторые индексы с именами nlanestatus1, nlanestatus2 ... и т. Д. И slanestatus1, slanestatus2 ... и т. Д.

Я пытался отфильтровать эти значения по

$array = array_filter($dsr, function($key) {
    return strpos($key, 'lanestatus') === 0;
}, ARRAY_FILTER_USE_KEY);

Я взял этот код из другого вопроса о stackoverflow и понял, что, изменив значение от 0 до 1 в функции ($ key), я могу получитьОднако после экспериментов с этим кодом я обнаружил, что эта функция не работает.Я попытался изменить 3 равно 2 равно, и он просто отображает весь массив $ dsr.Любая помощь в кодировании PHP будет полезна.

Другой способ решить эту проблему - изменить индексы mysql, но система уже работает, и их изменение может привести к его поломке, поэтому это не вариант.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2019

strpos находит положение ключа в строке.В этом случае он ищет 'lanestates' в fe 'nlanestatus2', эта позиция никогда не будет 0, поскольку 0 будет первой позицией.

Это сработает, если вы захотите использовать strpos

return strpos($key, 'lanestatus');

Но на самом деле вам не понадобится позиция клавиши $, поэтому я бы предложил использовать strstr

return strstr($key, 'lanestatus');
0 голосов
/ 20 сентября 2019

Измените свою функцию следующим образом:

$array = array_filter($dsr, function($key) {
    return strpos($key, 'lanestatus') !== false;
}, ARRAY_FILTER_USE_KEY);

В вашем случае

strpos($key, 'lanestatus') === 0;

означает, что вы проверяете, что ваша клавиша начинается с lanestatus.Но так как ваши ключи nlanestatus1 и slanestatus1, они никогда не начинаются с lanestatus.

Если вы на 100% уверены, что перед lanestatus есть один символ, который вы можете использовать:

$array = array_filter($dsr, function($key) {
    // check that position of `lanestatus` starts from position 1 in `$key`
    return strpos($key, 'lanestatus') === 1;
}, ARRAY_FILTER_USE_KEY);
0 голосов
/ 20 сентября 2019

Как насчет:

$array = [];
foreach($dsr as $index) {
    if(strpos($index, 'lanestatus') !== false) {
        $array[] = $index;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...