Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Следующий ключ массива, после известного
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




Известен текущий ключ, нужно получить следующий.
как это можно сделать без перебора ?
$array = array(4=>'трям', 6=>'трям', 8=>'трям', 9=>'трям', 11=>'трям');
$action = 6;
foreach ($array AS $k=>$v){
if (empty($action))
return $k;
if ($k == $action)
$action = 0;
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5549
Пользователь №: 35718
На форуме: 4 года, 1 месяц, 27 дней
Карма: 170




Kusss, http://php.net/manual/ru/ref.array.php

Хотя наверно нет без перебора не обойтись, не сразу понял задачу. Думал вам next подойдёт.
Что это за массив? Почему именно массив, а не БД. Там эта задача решается легко.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




в БД ? так даже лучше будет. как это сделать ?

массив как раз оттуда.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5549
Пользователь №: 35718
На форуме: 4 года, 1 месяц, 27 дней
Карма: 170




Kusss, говорите сразу в следующий раз откуда массив, обычно спрашиваю, но обычно спрашиваю у новичков wink.gif
Подробнее задачу опишите.
есть $action = 6; - что это? и откуда эта цифра
ну и что надо получить на выходе?


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 294
Пользователь №: 39616
На форуме: 2 года, 8 месяцев, 3 дня
Карма: 33




Цитата (Kusss @ 17.11.2015 - 14:48)
Известен текущий ключ, нужно получить следующий.
как это можно сделать без перебора ?

Да никак наверное без перебора.
Разве что использовать встроенные функции типа array_search:
function getNextKey($arr, $key) {
$keys = array_keys($arr);
$idx = array_search($key, $keys);
if ($idx === false || $idx == count($arr) - 1) return null;
return $keys[$idx+1];
}

// test
$array = array(4=>'трям', 6=>'трям', 8=>'трям', 9=>'трям', 11=>'трям');
echo getNextKey($array, 6)


http://codepad.org/1nQUwPpF


--------------------
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




brevis
Спасибо за такое решение

Valick
Как бы объяснить ....

Есть входящие данные: номер раздела($razdel_select) и текущая id из выборки ($action) .
$sql = "
SELECT
name.*
FROM
`razdel2_product` AS r
LEFT JOIN
`product` AS pr ON pr.id = r.product_id
LEFT JOIN
`print_razdel` AS print_razdel ON print_razdel.print_id = pr.print_id
LEFT JOIN
`print_razdel_name` AS name ON name.id = print_razdel.print_razdel_id
WHERE
r.razdel2_id = "
.(int)$razdel_select." AND
pr.live = 0
GROUP BY
print_razdel.print_razdel_id
ORDER BY
name.id
"
;

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 11 дней
Карма: 448




Цитата (Kusss @ 17.11.2015 - 17:08)
Есть входящие данные: номер раздела($razdel_select) и текущая id из выборки ($action)

Цитата (Kusss @ 17.11.2015 - 15:48)
Известен текущий ключ, нужно получить следующий.

И что надо получить? Какой "следующий"? Из данных по указанному запросу? Если да, то что мешает это сделать в запросе?

Valick совершенно прав, что всё, что можно сделать в БД, нужно сделать в БД. И в ПХП только считать результат, а не мудрить. Отдельные сложные и вычурные случаи не берем во внимание - твой случай достаточно простой.

Это сообщение отредактировал sergeiss - 17.11.2015 - 17:50


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




sergeiss
Вопрос "как это сделать ?", был тактично пропущен .

P.S. Получить следующий name.id , известно что предыдущий "тут число"
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5549
Пользователь №: 35718
На форуме: 4 года, 1 месяц, 27 дней
Карма: 170




Цитата (Kusss @ 17.11.2015 - 16:54)
Вопрос "как это сделать ?", был тактично пропущен

вы не ответили на мои вопросы, я же не буду вас заставлять


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26041
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 3 дня
Карма: 726

Не курю:
1 год, 3 месяца, 19 дней


Цитата
Да никак наверное без перебора.

ещё как. тока вспотеешь.

$transport = array('foot'=>2, 'bike'=>34, 'car'=>4, 'plane'=>54);
$cur_key = 'bike';
$keys = array_keys($transport);
$fliped_array = array_flip($keys);
$indexKey = $fliped_array[$cur_key];
$slice_array = array_slice($transport, $indexKey+1,1);
$nextKeyValue = array_keys($slice_array);
$next_key =$nextKeyValue[0];

echo $next_key; //car


если в таблице нет первичного ключа - то нужен уникальный ориентир

а так

select * from table where id> (select * from table where name='car') limit 1


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 11 дней
Карма: 448




Цитата (Игорь_Vasinsky @ 17.11.2015 - 18:15)
select * from table where id> (select * from table where name='car') limit 1

Тока в скобках звездочу надо заменить на имя одного поля и общая схема да, такая будет (это я для ТС поясняю). Внутри скобок может быть любой запрос, в т.ч. твой с джойнами.

PS. Что касается начального вопроса, насчет поиска в массиве, то любое решение, отличающееся от простого перебора, должно быть более долгим по времени smile.gif Потому что все встроенные функции все равно будут по массиву бегать и что-то делать. В том решении, что Игорь написал (на ПХП) этих циклов внутри функций будет много.

Это сообщение отредактировал sergeiss - 17.11.2015 - 18:35


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26041
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 3 дня
Карма: 726

Не курю:
1 год, 3 месяца, 19 дней


Цитата
В том решении, что Игорь написал (на ПХП) этих циклов внутри функций будет много.

не не. это я показал что без циклов php это возможно

а так - ну всем же ясно - если можно сделать с данным сразу в бд то что нужно сделать - то надо и делать на уровне БД


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dezigo  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Indiana Jones
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1002
Пользователь №: 5429
На форуме: 8 лет, 6 месяцев, 23 дня
Карма: 46




используй next()
http://php.net/manual/en/function.next.php

но, это сдвинет указатель

<?php
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = next($transport); // $mode = 'car';
$mode = prev($transport); // $mode = 'bike';
$mode = end($transport); // $mode = 'plane';
?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5549
Пользователь №: 35718
На форуме: 4 года, 1 месяц, 27 дней
Карма: 170




Dezigo, не прокатит, известен только ключ, указатель на начале массива.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 11 дней
Карма: 448




Цитата (Valick @ 17.11.2015 - 21:20)
не прокатит

Ну почему же? Прокатит smile.gif Но это будет идентично использованию foreach


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса