Пузырьковая сортировка ассоциативного массива

// Пузырьковая сортировка одномерного ассоциативного массива в PHP

function BubbleSortAssociationArrayValues($arrSort = []) // функция пузырьковой сортировки ассоциативного массива (ключи остаются на месте, значения сортируем)
{
    if (count($arrSort) === 0) return false; // пустой массив нет смысла сортировать, функция вернет лож
    // алгоритм пузырьковой сортировки
    foreach ($arrSort as $keyFirst => $valueFirst) { // получаем в цикле первую часть сверяемого значения массива
        foreach ($arrSort as $keySecond => $valueSecond) { // получаем в подцикле вторую часть сверяемого значения массива
            if ($arrSort[$keyFirst] < $arrSort[$keySecond]) { // если значение из массива по первому ключу меньше чем по второму ключу
                list($arrSort[$keyFirst], $arrSort[$keySecond]) = [$arrSort[$keySecond], $arrSort[$keyFirst]]; // меняем местами значения в массиве сохраняя ключи
                //list($keyFirst => $arrSort[$keyFirst], $keySecond => $arrSort[$keySecond]) = [$keyFirst => $arrSort[$keySecond], $keySecond  => $arrSort[$keyFirst]]; // указывать ключи можно начиная с PHP 7.1
            }
        }
    }
    return $arrSort;
}


function BubbleSortAssociationArrayValuesAndKey($arrSort = []) // функция пузырьковой сортировки ассоциативного массива (ключи вместе со значениями сортируем по значениям)
{
    if (count($arrSort) === 0) return false; // пустой массив нет смысла сортировать, функция вернет лож
    // алгоритм пузырьковой сортировки
    foreach ($arrSort as $keyFirst => $valueFirst) { // получаем в цикле первую часть сверяемого значения массива
        foreach ($arrSort as $keySecond => $valueSecond) { // получаем в подцикле вторую часть сверяемого значения массива
            if ($arrSort[$keyFirst] < $arrSort[$keySecond]) { // если значение из массива по первому ключу меньше чем по второму ключу
                // переносим значение в конец массива
                unset($arrSort[$keySecond]);
                $arrSort[$keySecond] = $valueSecond;
            }
        }
    }
    return $arrSort;
}


function NewRandAssociationArray($sizeArray = 5) // функция генерации случайного ассоциативного массива, по умолчанию с 5-тью записями
{
    $newArray = array(); // создадим пустой массив
    $strForKey = '1234567890qwertyuiopasdfghjklzxcvbnm'; // набор символов для генерации ключей массива

    while (count($newArray) < $sizeArray) { // если меньше или равно $sizeArray то выполняем цикл
        // заполним массив случайными числовыми значениями и рандомными ключами в цикле
        $var = rand(0, 100); // получаем случайное число для значения от 0 до 100
        $key = (string)$strForKey[rand(0, strlen($strForKey)-1)] . $strForKey[rand(0, strlen($strForKey)-1)] . $strForKey[rand(0, strlen($strForKey)-1)]; // создаем ключ из трех случайных символов из $strForKey
        if ((in_array($var, $newArray) === false) && (array_key_exists($key, $newArray)) === false) { // если такого значения и ключа еще нет в массиве, то добавим запись в массив
            $newArray[$key] = $var;
        }
    }
    return $newArray;
}


$testArr = NewRandAssociationArray(10); // создание нового массива

print_r($testArr); // дамп сгенерированного массива

print_r(BubbleSortAssociationArrayValues($testArr)); // дамп отсортированного ассоциативного массива, сортировка значений не перемещая ключи

print_r(BubbleSortAssociationArrayValuesAndKey($testArr)); // дамп отсортированного ассоциативного массива, сортировка по значениям с привязкой к ключам
Array - дамп сгенерированного ассоциативного массива
(
    [ukk] => 40
    [0qc] => 35
    [p3y] => 86
    [vh0] => 36
    [gmi] => 2
    [nvm] => 96
    [ur0] => 34
    [jk4] => 68
    [lfl] => 66
    [dzm] => 25
)


Array - дамп отсортированного ассоциативного массива, сортировка значений не перемещая ключи
(
    [ukk] => 2
    [0qc] => 25
    [p3y] => 34
    [vh0] => 35
    [gmi] => 36
    [nvm] => 40
    [ur0] => 66
    [jk4] => 68
    [lfl] => 86
    [dzm] => 96
)


Array - дамп отсортированного ассоциативного массива, сортировка по значениям с привязкой к ключам
(
    [gmi] => 2
    [dzm] => 25
    [ur0] => 34
    [0qc] => 35
    [vh0] => 36
    [ukk] => 40
    [lfl] => 66
    [jk4] => 68
    [p3y] => 86
    [nvm] => 96
)

php sort array BubbleSort Bubble association

просмотров: 245