Как я могу отсортировать объект в Symfony? - PullRequest
0 голосов
/ 02 января 2019

Это "поля"

{#751 ▼
  +"id": array:9 [▼
    "fieldName" => "id"
    "type" => "integer"
    "scale" => 0
    "length" => null
    "unique" => true
    "nullable" => false
    "precision" => 0
    "id" => true
    "columnName" => "id"
  ]
  +"username": array:8 [▼
    "fieldName" => "username"
    "type" => "string"
    "scale" => 0
    "length" => 25
    "unique" => true
    "nullable" => false
    "precision" => 0
    "columnName" => "username"
  ]
  +"unique_id": array:8 [▼
    "fieldName" => "unique_id"
    "type" => "string"
    "scale" => 0
    "length" => 10
    "unique" => true
    "nullable" => false
    "precision" => 0
    "columnName" => "unique_id"
  ]
  +"password": array:8 [▼
    "fieldName" => "password"
    "type" => "string"
    "scale" => 0
    "length" => 64
    "unique" => false
    "nullable" => false
    "precision" => 0
    "columnName" => "password"
  ]
  +"email": array:8 [▼
    "fieldName" => "email"
    "type" => "string"
    "scale" => 0
    "length" => 191
    "unique" => true
    "nullable" => false
    "precision" => 0
    "columnName" => "email"
  ]
  +"isActive": array:8 [▼
    "fieldName" => "isActive"
    "type" => "boolean"
    "scale" => 0
    "length" => null
    "unique" => false
    "nullable" => false
    "precision" => 0
    "columnName" => "is_active"
  ]
}

Мне бы хотелось, чтобы имя пользователя всегда было в начале, а пароль - всегда в конце.

Вот мой подход:

  usort($fields, function ($a, $b) {  if ($a['fieldName'] == 'username' || $b['fieldName'] == 'password') return -1;
        elseif ($a['fieldName'] == 'password' || $b['fieldName'] == 'username') return 1;
        else return 0;
      });

Но я получаю сообщение об ошибке:

Предупреждение: usort () ожидает, что параметр 1 будет массивом, объект задан

1 Ответ

0 голосов
/ 02 января 2019

Первый параметр usort должен быть массивом, а $fields - объектом. Одним из вариантов может быть приведение его к массиву, например:

$fields = (array)$fields;

А затем передайте его usort:

usort($fields, function ($a, $b) {
    if ($a['fieldName'] == 'username' || $b['fieldName'] == 'password') return -1;
    elseif ($a['fieldName'] == 'password' || $b['fieldName'] == 'username') return 1;
    else return 0;
});
...