1

Тема: Сортування масиву

Усім привіт, абсолютно зламався на сортуванні масивів як уже не пробував але щось ніяк не можу зрозуміти яким чином це можна зробити

І так у нас є массив:

$arrayExample = [
    ['name' => 'alex', 'salary' => [30 => '5.000', 25 => '6.000',] ],
    ['name' => 'cody', 'salary' => [30 => '7.000', 25 => '9.000',] ]
];

Потрібна функція яка дасть нам такий вихід:

$arraySorted = [
    30 => ['alex' => '5.000', 'cody' => '6.000'],
    25 => ['alex' => '7.000', 'cody' => '9.000']
];

Я пробував таким чином:

foreach ($arrayExample as $arr) {

    foreach ( $arr as $val) {
        if ($val === 'alex') {
            $val = 30;
        } elseif ($val === 'cody') {
            $val = 25;
        }
        array_push($result, $val);

        foreach ($val as $key => $value) {
            if($key === '30') {
                $key = 'alex';
            }
            if//і тд
        }
    }
}

Короче кажучи нічого не получається... хтось може підказати яким чином це правильно можна зробити? І які варінти є, бо я десь читав що можна якось і з JSON то зробити але там толком нічого не було написано

2

Re: Сортування масиву

Тут 2 задачі:
1. Переробити масив з [['name'=>name, 'salary'=>[key=>value]] на [key=>[name=>value]]
2. Відсортувати отриманий масив.
Ці дві задачі незалежні, ви їх не зможете ефективно об'єднати. Тому спершу зробіть задачу 1, а потім задачу 2.
Судячи з вашого коду, key і name ще якось пов'язані (30-alex, 25-cody), але як саме і чому - для мене повна загадка.
По сортуванню: якщо ви не вивчаєте алгоритми сортування і в умові немає конкретного алгоритму, скористайтеся стандартними функціями для сортування.

Подякували: Overhand, flatliner2

3

Re: Сортування масиву

<?php

$arrayExample = [
    ['name' => 'alex', 'salary' => [30 => '5.000', 25 => '6.000',] ],
    ['name' => 'cody', 'salary' => [30 => '7.000', 25 => '9.000',] ],
];


$arraySorted = [];

foreach($arrayExample as $key=>$value){
    
   if(isset($arrayExample[$key+1]['name'])){
    $arraySorted[30][$value['name']] = $value['salary']['30'];
    $arraySorted[30][$arrayExample[$key+1]['name']] = $value['salary']['25'];
    
    $arraySorted[25][$value['name']] = $arrayExample[$key+1]['salary']['30'];
    $arraySorted[25][$arrayExample[$key+1]['name']] = $arrayExample[$key+1]['salary']['25'];

   }
}



print_r($arraySorted);

Ну а що, конкретно в даному випадку працюватиме як годинник :D

Подякували: Overhand, kisilam2

4

Re: Сортування масиву

VTrim написав:
<?php

$arrayExample = [
    ['name' => 'alex', 'salary' => [30 => '5.000', 25 => '6.000',] ],
    ['name' => 'cody', 'salary' => [30 => '7.000', 25 => '9.000',] ],
];


$arraySorted = [];

foreach($arrayExample as $key=>$value){
    
   if(isset($arrayExample[$key+1]['name'])){
    $arraySorted[30][$value['name']] = $value['salary']['30'];
    $arraySorted[30][$arrayExample[$key+1]['name']] = $value['salary']['25'];
    
    $arraySorted[25][$value['name']] = $arrayExample[$key+1]['salary']['30'];
    $arraySorted[25][$arrayExample[$key+1]['name']] = $arrayExample[$key+1]['salary']['25'];

   }
}



print_r($arraySorted);

Ну а що, конкретно в даному випадку працюватиме як годинник :D

короче зробив так))

function justSortIt($array) :array {

    $sorted = [];

    foreach ($array as $val) {
        foreach ($val['salary'] as $key => $value) {
            $sorted[$key][$val['name']] = $value;
        }
    }

    return $sorted;
}

$result = justSortIt($arrayExample);

var_dump($result);

5

Re: Сортування масиву

Це працює, бо початковий масив був сортований.