Intereting Posts

php ассоциативный массив ключей (не сортировка)

Мой массив:

$data = array('two' => 2, 'one' => 1, 'three' => 3); 

Теперь, когда я перебираю массив, первое значение, которое появится, вероятно, будет

 $data['two'] // = 2 @ index[0] 

правильно?

Что делать, если я хочу переместить $ data [1] в позицию $ data [0]?

Перефразировать:

Как заставить массив выглядеть так (так что «один» появляется в $ data [0])

 $data = array('one' => 1, 'two' => 2, 'three' => 3 

Зачем мне это нужно?

Я использую воспламенитель кода, встроенная функция table-> generate принимает ассоциативный массив и создает таблицу, но не предлагает метода размещения столбцов. Вот почему я хотел бы переместить столбцы в исходном массиве.

Взгляните на комментарий daniele centamore относительно функции array_splice () PHP, где он предоставляет пару функций для перемещения элементов в ассоциативном массиве.

Два возможных решения (без использования array_splice ):

1) Создайте новый массив с новым порядком ключей.

 $new_keys = array('one', 'two', 'three'); $new_data = array(); foreach ($new_keys as $key) { $new_data[$key] = $data[$key]; } $data = $new_data; 

2) Переместите элемент one вверх, удалите его из $data и скопируйте оставшуюся часть массива.

 function rearrangeData($data) { $result['one'] = $data['one']; unset($data['one']); return array_merge($result, $data); } $data = rearrangeData($data); не function rearrangeData($data) { $result['one'] = $data['one']; unset($data['one']); return array_merge($result, $data); } $data = rearrangeData($data); 

PHP имеет 13 функций для сортировки массивов , по ключу, по значению, определяемыми пользователем функциями, где вы можете указать, что «один» предшествует «двум». Также есть array_shift, array_unshift, array_push и array_pop для перемещения вещей на фронт или конец массива. Вы можете построить целый новый массив из существующего.

Смотрите ksort и uksort .

Вот рабочий пример:

 <?php $data = array('two' => 2, 'one' => 1, 'three' => 3); print_r($data); ksort($data); print_r($data); uksort($data,'cmp'); print_r($data); function cmp($a, $b) { $num=' one two three four five six seven eight nine ten'; $ai = stripos($num,$a); $bi = stripos($num,$b); if ($ai>0 && $bi>0) { return ($ai > $bi) ? 1 : -1; } return strcasecmp($a, $b); } 

Вывод:

 Array ( [two] => 2 [one] => 1 [three] => 3 ) Array ( [one] => 1 [three] => 3 [two] => 2 ) Array ( [one] => 1 [two] => 2 [three] => 3 ) 

Запустите это: http://codepad.org/yAK1b1IP

Я думаю, вы должны использовать функцию asort:

 $data = array('two' => 2, 'one' => 1, 'three' => 3); $dataOrdered = $data; asort($dataOrdered); 

Запустить этот код