[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ksort своими руками
noskovgleb
Ребята. Значит такая вещь.
есть массив сгенерированных строк, которые потом я преобразовываю в ключ массива. а значениями этих элементов будут числа 1,2,3,4,5,6... итд. Не знаю чтобы такого придумать чтоб отсортировать массив в ключе которого будет строка.
Вот что уже есть:

<?php

function
generateString($length){
$chars = 'abcdefghiklmnopqrstvxyz'; // Перечень символов из которых генерируем строку
$numChars = strlen($chars); // сколько символов в переменной сhars
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}

return $string;
}
// Cоздаем массив с данными
for($i=0;$i<$_POST["NGenerate"];$i++)
$arr[]=generateString(3);
// Переобразовываем ключи как значения////////////////////////////////////////
if(!empty($arr))
{
foreach($arr as $value => $key)
{
$keyarr[$key]= $value;
}
//Сортируем массив по ключу////////////////////////////////////////////////////
//после этого как раз должна быть нормальная не связанная с ksort сортировка////
/* ksort($keyarr);
reset($keyarr);*/

print_r($keyarr);


}

Вот собственно ничего можно сказать и нету. И да, сортировать массив нужно по ключу в котором будет строка. В данном случае все ключи будут в виде трех английских букв.
$_POST["NGenerate"] эта переменная получается с другой странице где я ввожу сколько будет элементов в массиве.



Спустя 6 часов, 6 минут, 13 секунд (25.07.2011 - 09:38) kovaldm написал(а):
Вот так попробуй.
    function generateString($length)
{
$chars = 'abcdefghiklmnopqrstvxyz'; // Перечень символов из которых генерируем строку
$numChars = strlen($chars); // сколько символов в переменной сhars
$string = '';

for ($i = 0; $i < $length; $i++)
{
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}

return $string;
}

// Cоздаем массив с данными
for($i = 0; $i < $_POST["NGenerate"]; $i++)
{
$arr[] = generateString(3);
}

//Меняем местами ключи и значения
$keyarr = array_flip($arr);

//Сортируем
if(ksort($keyarr, SORT_STRING))
print_r($keyarr);
else
echo 'Ошибка!';

Спустя 4 часа, 59 минут, 57 секунд (25.07.2011 - 14:38) noskovgleb написал(а):
Думаю я не совсем точно описал проблему. ksort замечательно работает без всего остального. Но я не знаю как обойтись без него, создать функцию которая будет сортировать по ключам.

Спустя 4 минуты, 14 секунд (25.07.2011 - 14:42) walerus написал(а):
Цитата (noskovgleb @ 25.07.2011 - 11:38)
Думаю я не совсем точно описал проблему. ksort замечательно работает без всего остального. Но я не знаю как обойтись без него, создать функцию которая будет сортировать по ключам.

Можно поинтересоваться, для чего изобретать велосипед?, если он уже есть, и прекрасно ездит...

Спустя 1 минута, 16 секунд (25.07.2011 - 14:44) noskovgleb написал(а):
Для получение опыта.

Спустя 48 минут, 25 секунд (25.07.2011 - 15:32) noskovgleb написал(а):
Есть еще варианты?

Спустя 11 часов, 25 минут, 35 секунд (26.07.2011 - 02:58) noskovgleb написал(а):
Решил задачу так:


<?php
function
generateString($length)
{
$chars = 'abcdefghiklmnopqrstvxyz';
// Перечень символов из которых генерируем строку
$numChars = strlen($chars);
// сколько символов в переменной сhars
$string = '';
for($i = 0; $i < $length; $i++)
{
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}
return $string;
}
// Cоздаем массив с данными
for($i = 0; $i < $_POST["NGenerate"]; $i++)
{
$arr[] = generateString(3);
}
// Переобразовываем ключи как значения////////////////////////////////////////

if(!empty($arr))
{

foreach($arr as $value => $key)
{
$massiv[$key] = $value;
}
}

for($i = 0; $i < count($arr); $i++)for($j = 0; $j < count($arr); $j++)
{

if($arr[$i] < $arr[$j])
{
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
continue;
}
}

print_r($massiv);
//Вывод массива в ключе которого строки
echo "<br>";
print_r($arr);
// Вывод массива в ключе которого числа но с теми же строками в значении
echo "<br>";

foreach($arr as $value => $key)
foreach($massiv as $value2 => $key2)
{

if($arr[$value] == $value2)
//Если (arr[0]=asd) == asd то тогда...

{
$mas[$arr[$value]] = $key2;
//тогда делаем вот так вот)
}
}

print_r($mas);
?>

Можно ли как то это усовершенствовать? А именно сортировку. Потому что мне не нравиться что я создаю еще один массив Mas
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.