Мой массив:
$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);
Запустить этот код