PHP получает предыдущий элемент массива, зная текущий ключ массива

Ответить на Ваш комментарий к моему другому ответу:

можно сделать подстановочный параметр в конце querystring как

[WebGet(ResponseFormat = WebMessageFormat.Xml,
        UriTemplate = "SomeRequest?qs1={*qs1}")]
XElement SomeRequest2(string qs1);

Этот способ, которым qs1 строковый параметр будет целыми сырыми данными querystring после qs1 =, Вы могли затем проанализировать это вручную в Вашем коде.

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

Из MSDN:

сегменты Wildcard должны следовать следующим правилам:

  • может быть самое большее один именованный подстановочный сегмент для каждой шаблонной строки.
  • названный подстановочный сегмент А должен появиться в самом правом сегменте в пути.
  • названный подстановочный сегмент А не может сосуществовать с анонимным подстановочным сегментом в той же шаблонной строке.
  • название именованного подстановочного сегмента должно быть уникальным.
  • Именованные подстановочные сегменты не могут иметь значений по умолчанию.
  • Именованные подстановочные сегменты не могут закончиться “/”.
29
задан Habeeb Perwad 11 October 2013 в 09:09
поделиться

1 ответ

Если ваши данные велики, то лучше избегать циклов. Вы можете создать свою собственную пользовательскую функцию, например, так:

$array = array('first'=>'111', 'second'=>'222', 'third'=>'333');

function previous($key, $array) {
  $keysArray = array_keys($array);
  $keyNumber = array_search($key, $keysArray);
  if ($keyNumber === 0) {
    $keyNumber = count($array);
  }
  return $array[$keysArray[$keyNumber - 1]];
}
var_dump(previous("second", $array));

Обратите внимание, что если вы предоставите первый ключ, он вернет последнее значение, как циклический массив. Вы можете справиться с этим так, как вам нравится.

Немного подправив, вы также можете обобщить его, чтобы получить следующие значения.

Что касается того, почему prev не работает, потому что он не используется для этой цели. Он просто устанавливает внутренний указатель массива на единицу позади, с точностью до next

Надеюсь, это поможет

0
ответ дан 28 November 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: