2014-02-03 3 views
1

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

В форме есть список элементов, созданных из базы данных SQL. В каждом элементе установлен флажок, если вы хотите перенести его на следующую страницу. Это никогда не заданное количество элементов и зависит от того, к какому клиенту/таблице обращаются. Имена Флажок генерируются внутри SQL выбора во время цикла, так что значение имени Флажок идет вверх «num1, num2, num3» и т.д.

На выходе формы у меня есть:

foreach ($_get as $result){ 
echo $result; 
} 

Это перекликается значения полного массива% _get.

Я хочу отфильтровать его, чтобы показывать только значения $ _get, содержащие «num», поэтому он не зацикливается ни на что другое, что может быть в массиве $ _get.

Так, например, я хочу, чтобы это:

echo %_get['num1]; 
echo %_get['num2]; 
echo %_get['num3]; 
/* etc.. looping the amount of times the string "num" is used and not looping if for 
example it didn't contain "num" like %_get['egg'] if it existed */ 

Я надеюсь, что это имеет смысл.

Я открыт для любых решений или альтернативных способов сделать это, если есть лучший способ.

Большое спасибо, Ash

ответ

1

Цикл foreach может выбирать ключ и значение элементов массива $ _GET, поэтому вы можете проверить, начинается ли ключ с num.

foreach($_GET as $key => $value) { 
    if(strpos($key, 'num') === 0) { 
     echo $value; 
    } 
} 

Я настоятельно рекомендую фильтровать и проверять любые входные данные (GET, POST и т. Д.), Особенно в производственной системе. http://www.php.net/manual/en/function.filter-input.php для стартеров.

+0

Это идеально подходит для того, что я хотел сделать. Спасибо за дополнительную информацию о проверке ввода тоже :) – Ash

+0

Просто, чтобы указать, что этот код не будет работать, стоит отметить '$ key' и' $ _key' ... его ловушку! – edmondscommerce

0

попробовать это:

foreach ($_GET as $key=>$result){ 
    if(substr($key, 0, 3) == 'num') { 
    echo $result; 
    } 
} 

петли все глобальный массив и фильтры $ _GET только те, начиная с '' NUM и повторяет значения.

+0

Вы должны дать больше, чем просто код немой, объясните код –

+0

Я согласен с Патриком. Кроме того, strpos - это гораздо более быстрый способ проверить, начинается ли строка с другой строки. http://stackoverflow.com/questions/5821483/what-is-the-fastest-way-to-find-the-occurrence-of-a-string-in-another-string – Daveo

1

Вы просто хотите сделать что-то вроде этого:

foreach($_GET as $key=>$val){ 
    if(false !== stripos($key, 'num')){ 
     echo $_GET[$key]; 
    } 
} 

Это цикл по полному массиву _GET и проверить, если ключ содержит строку Num. Я использовал нечувствительные к регистру полоски, если вы хотите, чтобы он был чувствительным к регистру, замените stripos на strpos.

Причина проверки на явное ложь заключается в том, что stripos возвращает позицию строки, которая может быть равна нулю, если строка найдена. Ноль в PHP слабо равен false. Используя !== вместо !=, мы сопоставляем результат только в том случае, если он не является ложным (я вообще не нашел).

Обратите внимание, что вам действительно нужно выполнить какую-либо фильтрацию входных данных и выходное экранирование в вашем реальном коде мира.

+0

Проверка на 0 абсолютно нормально, поскольку 0 означает, что стрелка была найдена в начале стога сена. ;) – Daveo

+0

Именно поэтому, проверяя, что это не ложь, но ноль будет разрешен с помощью этого кода – edmondscommerce

0

Вы можете использовать array_filter с обратным вызовом для фильтрации элементов массива.

http://uk3.php.net/array_filter 

, например:

function even($var) 
{ 
    // returns whether the input integer is even 
    return(!($var & 1)); 
} 

$array = array(6, 7, 8, 9, 10, 11, 12); 

print_r(array_filter($array, "even")); 

$filteredArray = array_filter($array, "even"); 

Это позволит отфильтровать на основе чет/нечет. вы можете изменить свой обратный вызов на номер.

+0

Это решение с избыточным количеством, которое запросило ОП. KISS, пожалуйста. – Daveo

Смежные вопросы