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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пара вопросов по внутренним указателям массива и ключам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
ekkl
Отправлено: 07 Октября, 2013 - 15:56:42
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Всем доброго времени суток.
Возник вопрос связан с внутренним указателем массива.
Допустим есть массив. Необходимые мне действия
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.  

(Отредактировано автором: 07 Октября, 2013 - 16:00:51)

 
 Top
ekkl
Отправлено: 08 Октября, 2013 - 23:34:59
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Попробую объяснить по-другому
Есть ассоциативный массив (ключ значение)
По ключу мне нужно узнать какой элемент массива идет за ним
Вот что я изобрел
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. По крайней мере я не нашел.
Всем спасибо.

(Отредактировано автором: 08 Октября, 2013 - 23:36:42)

 
 Top
DelphinPRO
Отправлено: 08 Октября, 2013 - 23:55:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




указатель сбрасывать следует.
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. }

ну и проверку на пустой массив добавить вначале функции.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
ekkl
Отправлено: 09 Октября, 2013 - 10:05:42
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




За сброс указателя, спасибо. Протупил. Ну а на пустой массив проверку делать не нужно (в моем случае эта проверка происходит несколько раньше, т.е. она уже присутствует в вызывающей функции)

(Отредактировано автором: 09 Октября, 2013 - 10:06:10)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB