Преобразование массива

Юзер

Новичок
Преобразование массива

Приветствую
как оптимальней преобразовать/изменить массив такой:

Array
(
[0] => 0|text-0|url-0|
[1] => 1|text-1|url-1|
[2] => 2|text-2|url-2|
[3] => 7|text-7|url-7|
[4] => 9|text-9|url-9|
...
[n] => k|text-k|url-k|
)
n - число от 0 и до ..
k - число

в такой

Array
(
[0] => 0|text-0|url-0|
[1] => 1|text-1|url-1|
[2] => 2|text-2|url-2|
[7] => 7|text-7|url-7|
[9] => 9|text-9|url-9|
...
[k] => k|text-k|url-k|
)
 

netmac

Новичок
Идешь по массиву пока не дойдешь до k-ой строки, при этом считаешь строки

а потом $output = array_slice($Array, 0 , счетчик)
 

netmac

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

Фанат

oncle terrible
Команда форума
Юзер
а вы предполагаете, что можно обойтись без цикла?
 

Юзер

Новичок
Фанат
Мой уровень знаний в РНР пока ещё не позволяет мне лишь только предполагая, решать поставленные задачи. Хотя я надеялся, что есть какая-то функция, которая бы меняла ключи на новые, полученые из значений массива, при кое-каком приобразовании.. Например в моем варианте такое преобразование выглядело бы примерно так: $key[0] = explode("|", $value);

netmac
а можно про метод деления пополам по подробней?!
с примером, если не сложно.. просто о таком не слышал..
 

Фанат

oncle terrible
Команда форума
не нужен тебе никакой метод деления пополам.
товариж бредит.
Хотя я надеялся, что есть какая-то функция, которая бы меняла ключи на новые, полученые из значений массива
ты это серьёзно? вот прямо взяли и написали в пхп функцию для получения значений из персонально твоего массива?
м проблема только в твоём уровне знаний пхп, который позволяет любую задачу решить волшебной функцией, а ты вот, к сожалению, всех функций ещё не выучил.
а как выучишь - сразу станешь гуру в пхп.
я тебя правильно понимаю?
 

SelenIT

IT-лунатик :)
Кстати, и впрямь странный формат значений массива. Почему бы сразу не сделать его двумерным и исключить потребность в explode в качестве костыля?
 

netmac

Новичок
А ты почитай вот здесь например
http://algolist.manual.ru/search/bin_search.php
 

Фанат

oncle terrible
Команда форума
netmac
ты не въехал, что ему надо.
читай ещё раз, теоретик
 

netmac

Новичок
Автор оригинала: Фанат
не нужен тебе никакой метод деления пополам.
товариж бредит.
Двоичный поиск поможет всего лишь ускорить поиск нужной строки.
Учитывая что чел. собирается парсить строки массива, размеры которого толком не ясны (может он здоровый!), это бы сэкономило машинное время.
Если требования по скорости высоки, то двоичный поиск можно использовать, тем более что он очень просто реализуется.
 

Юзер

Новичок
Фанат
Может я че-то не понимаю, но это тот форум где помогают решить вопросы по программированию на РНР??? или это то место где обсуждают, кто что предполагает и кем в итоге станет?

Любезнийший, если Вы смеха ради ведёте эту дискуссию, то извольте откланяться..
 

Фанат

oncle terrible
Команда форума
Юзер
делай в цикле. если до тебя ещё не дошло.
ещё вопросы будут?
 

Фанат

oncle terrible
Команда форума
netmac
и чем ему поможет сортировка ключей, если поиск ему нужен по значениям?
 

SelenIT

IT-лунатик :)
Юзер

А еще лучше - объясни, что у тебя на входе и что ты хочешь получить в итоге. Лично у меня большое и страшное подозрение, что ни первый, ни второй массивы тебе не нужны :)

Больше того - я уверен, что у твоей задачи есть решение, не требующее переопределения ключей массива.
 

Юзер

Новичок
SelenIT
массив формируется из текстовой базы

ID|Category|Parent|
1|News|0|
2|Sport|1|
4|Finance|1|
и т.д.
ID - не может быть 1,2,3,4,5.. последовательным

так вот не хотелось бы каждый раз прибегать к помощи циклов для получения нужных значений из массива.. для этого хотел сформировать массив где ID было бы равно ключу массива. И что бы потом было удобно с ним работать..
Например:
$result = explode("|", $Category[2])
echo $result[1]; //Sport

вот..
 

SelenIT

IT-лунатик :)
Ну так и формируй его сразу, например наподобие такого...
PHP:
$txt_base = file('base.txt');
$arr = array();
foreach ($txt_base as $line) {
   $record = explode("|",$line);
   $arr[$record[0]]['Category'] = $record[1];
   $arr[$record[0]]['Parent'] = $record[2];
}
print_r($arr);
echo $arr[2]['Category'];
 

netmac

Новичок
Автор оригинала: Фанат
netmac
и чем ему поможет сортировка ключей, если поиск ему нужен по значениям?
Да ничем. Торможу. Я сначала понял что ему надо урезать массив до определенной строки.
Вобщем не важно. Спишем на 2 часа ночи :)
 

Юзер

Новичок
SelenIT
да я так и формировал.. смущал цикл.. решил узнать здесь, может есть альтернативный способ.. но вижу что нет.
Спасибо
 
Сверху