Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пара вопросов по внутренним указателям массива и ключам
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Пара вопросов по внутренним указателям массива и ключам

Страниц (1): [1]
 

1. ekkl - 07 Октября, 2013 - 15:56:42 - перейти к сообщению
Всем доброго времени суток.
Возник вопрос связан с внутренним указателем массива.
Допустим есть массив. Необходимые мне действия
1) установить внутренний указатель на элемент, соответствующий данному ключу
2) По ключу узнать первый/последний ли это элемент.

Среди родных функций не нашел подходящей, создал такую вот:
PHP:
скопировать код в буфер обмена
  1. public static function arrpos(&$arr, $key)
  2.    {
  3.           for ($r=0; $r<count($arr); $r++)
  4.           {
  5.                  if ($key == key($arr))
  6.                  {
  7.                         return;
  8.                  }
  9.                  next($arr);
  10.           }
  11.    }  

Куда дальше смотреть? Или я что-то пропустил в документации и необходимые функции есть. просто я их не заметил?
-----
Да, для чего мне это нужно:
PHP:
скопировать код в буфер обмена
  1.  
  2. unset ($this->_arr[$this->_key)
  3. // Нужно "передвинуть" $this->_key к следующему элементу, чтобы $this->_key указывал на существующий элемент
  4.  
2. ekkl - 08 Октября, 2013 - 23:34:59 - перейти к сообщению
Попробую объяснить по-другому
Есть ассоциативный массив (ключ значение)
По ключу мне нужно узнать какой элемент массива идет за ним
Вот что я изобрел
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $arr = array (
  4. "qwe" => "val",
  5. "tyu" => "val",
  6. "hhhh" => "val",
  7. "jjkk" => "val")
  8. get_nextkey($arr, "tyu") //must return "hhhh"
  9. get_nextkey($arr, "jjkk") //must return false (or null)
  10.  
  11. public static function get_nextkey(&$arr, $key)
  12. {
  13.     for ($r=0; $r<count($arr); $r++)
  14.     {
  15.         if ($key == key($arr))
  16.         {
  17.               next($arr);    
  18.              return key($arr);
  19.         }
  20.         next($arr);
  21.     }
  22. } //так плохо? Может для этого есть внутренняя функция
  23. ?>
  24.  

Повторюсь, мне не просто нужно перебрать элементы с foreach узнавая пару ключ/значение;
мне нужно, располагая только ключом, узнать: какой ключ СЛЕДУЮЩЕГО элемента, или false, если элемент последний. В принципе функция приведенная выше решает вопрос, но может что-то есть в самом ядре PHP. По крайней мере я не нашел.
Всем спасибо.
3. DelphinPRO - 08 Октября, 2013 - 23:55:45 - перейти к сообщению
указатель сбрасывать следует.
next() возвращает значение, которое можно сразу и возвращать функцией.

PHP:
скопировать код в буфер обмена
  1. function get_nextkey(&$arr, $key)
  2. {
  3.     reset($arr);
  4.     while ($key != key($arr)) {
  5.         if (false === next($arr)) break;    
  6.     }
  7.     return next($arr);
  8. }

ну и проверку на пустой массив добавить вначале функции.
4. ekkl - 09 Октября, 2013 - 10:05:42 - перейти к сообщению
За сброс указателя, спасибо. Протупил. Ну а на пустой массив проверку делать не нужно (в моем случае эта проверка происходит несколько раньше, т.е. она уже присутствует в вызывающей функции)

 

Powered by ExBB FM 1.0 RC1