Как узнать, является ли ключ массива последним? Здравствуйте! Имеется такой код:class Handler { public static function go_to($url, $parametrs = NULL) { if (isset($parametrs)) { foreach ($parametrs as $key => $value) { if (count($parametrs) > 1) { $params .= $key.'='.$value.'&'; } else { $params = $key.'='.$value; } } } if (isset($parametrs)) { return header('Location: /'.$url.'?'.$params.''); exit(); } else { return header('Location: /'.$url.''); exit(); } } } Использование: '20', 'r' => '29312')); ?>
Предназначен он для редиректа по ссылке, указанной в переменной $url с указанными параметрами $params. Проблема в том, что в конце url в адресной строке остаётся &(что не удивительно). Хочу его убрать. Предполагаю, что для этого нужно проверять if-ом, является ли ключ массива последним. Но как это осуществить?
Для проверки, является ли ключ массива последним, можно использовать функцию end(), которая перемещает внутренний указатель массива в конец и возвращает последний элемент. Соответственно, можно сравнить текущий ключ с последним элементом массива.
Вот пример исправленного кода с такой проверкой:
class Handler { public static function go_to($url, $parametrs = NULL) { if (isset($parametrs)) { $params = ''; foreach ($parametrs as $key => $value) { if ($key !== end(array_keys($parametrs))) { $params .= $key.'='.$value.'&'; } else { $params .= $key.'='.$value; } } } if (isset($parametrs)) { return header('Location: /'.$url.'?'.$params); exit(); } else { return header('Location: /'.$url); exit(); } } } Handler::go_to('index', array('success' => '20', 'r' => '29312'));
Теперь при использовании данного кода в адресной строке не будет лишнего символа "&" в конце.
Для проверки, является ли ключ массива последним, можно использовать функцию end(), которая перемещает внутренний указатель массива в конец и возвращает последний элемент. Соответственно, можно сравнить текущий ключ с последним элементом массива.
Вот пример исправленного кода с такой проверкой:
class Handler {public static function go_to($url, $parametrs = NULL)
{
if (isset($parametrs))
{
$params = '';
foreach ($parametrs as $key => $value)
{
if ($key !== end(array_keys($parametrs)))
{
$params .= $key.'='.$value.'&';
}
else
{
$params .= $key.'='.$value;
}
}
}
if (isset($parametrs))
{
return header('Location: /'.$url.'?'.$params);
exit();
}
else
{
return header('Location: /'.$url);
exit();
}
}
}
Handler::go_to('index', array('success' => '20', 'r' => '29312'));
Теперь при использовании данного кода в адресной строке не будет лишнего символа "&" в конце.