Задать вопрос
ragnar_ok
@ragnar_ok

Как сортировать массив в котором ключ для сортировки может быть на разном уровне вложенности?

Это сработает для ['question']['sort']:

uasort($array, function($a, $b) {
		if ($a['question']['sort'] == $b['question']['sort']) {
			return 0;
		}
		return ($a['question']['sort'] < $b['question']['sort']) ? -1 : 1;
});


Так как ['question']['sort'] может быть внутри ['question_sub'] выводит undefined index.

array(3) {
  [0]=>
  array(1) {
    ["question"]=>
    array(1) {
      ["sort"]=>
      int(0)
    }
  }
  [1]=>
  array(1) {
    ["question"]=>
    array(1) {
      ["sort"]=>
      int(1)
    }
  }
  [2]=>
  array(1) {
    ["question_sub"]=>
    array(1) {
      ["question"]=>
      array(1) {
        ["sort"]=>
        int(2)
      }
    }
  }
}

Как сортировать такой массив?
  • Вопрос задан
  • 73 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
GomelHawk
@GomelHawk
PHP / Symfony developer
На первый взгляд можно использовать что-нибудь такое:

uasort($value, static function ($a, $b) {
    $first  = $a['question']['sort'] ?? $a['question_sub']['question']['sort'];
    $second = $b['question']['sort'] ?? $b['question_sub']['question']['sort'];

    return $first <=> $second;
});


В общем случае недостаточно данных касательно возможной вложенности и прочего. В таком случае будет более сложное решение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
anton_reut
@anton_reut
Начинающий веб-разработчик
Сделай нормальный вид с помощью

echo "<pre>";
print_r($твой-массив);
echo "</pre>";


А то не понятно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы