Мне нужно отсортировать массив строк в алфавитном порядке и установить каждый ключ таким же, как значение (потому что isset() намного быстрее, чем in_array()). Я могу легко сделать это, сделав два прохода по массиву, но мне было любопытно, можно ли сделать это только за один проход.
Я хотел бы превратить это:
array(
0 => 'car',
1 => 'apple',
2 => 'dog',
3 => 'box'
)
...в это:
array(
'apple' => 'apple',
'box' => 'box',
'car' => 'car',
'dog' => 'dog'
)
Я сделал несколько поисков, но ничего не могу найти по этому поводу (в основном я могу найти только информацию о сохранении отношения ключ-значение при сортировке).
Я знаю, что это может быть расценено как попытка микрооптимизации, но я спрашиваю больше из любопытства, чем из желания улучшить производительность. Я надеюсь, что смогу узнать что-то полезное, решив эту проблему, чтобы у меня были знания в будущем.
Изменить: используется для изменения поля перечисления в базе данных mysql. Когда в систему добавляются новые функции, в определенных столбцах требуются новые значения перечисления. Вместо того, чтобы отслеживать ошибки и вручную добавлять новые значения, я хотел бы сделать систему самокорректирующейся.
В общем, попробуйте вставить строку. Если это не удается с ошибкой усечения, которая возникает при добавлении неопределенного значения перечисления, затем извлеките перечисления для столбца, проверьте, присутствует ли перечисление (это может быть другая проблема, вызывающая ошибку), если это не так, и значение не является NULL или пустой строкой, добавьте его.
Я хотел бы сохранить значения перечисления в алфавитном порядке для собственного здравомыслия, и я устанавливал ключи и значения одинаковыми, чтобы я мог сделать две вещи:
Делайте isset($values($new_value)) вместо in_array($value,$values). Вот почему мне нужны значения в ключах.
Используйте implode для создания инструкции ALTER:
$query_text = "ALTER TABLE table CHANGE column column ENUM('".implode("','",$values)."')...;";
Я понимаю, что мог бы использовать implode("','",array_keys($values))
вместо этого в этой ситуации, но мне любопытно, как бы я сделал то, о чем изначально просил, потому что в будущем может наступить время, когда мне нужно будет сделать что-то более сложное для массива, одновременно сортируя его.
TL;DR: меня интересует не следует изменять этот массив при сортировке, а то, как я буду изменять массив при сортировке Это.
apple
и, следовательно, не потеряете одно яблоко при тасовке? - person RiggsFolly   schedule 12.07.2017array_flip
массив? - person deceze♦   schedule 12.07.2017