我的阵列:
$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
为什么我需要这个?
我使用代码点火器,表 - >生成内置函数接受一个关联数组并创建一个表,但不提供排列列的方法。这就是我想移动源数组中的列的原因。
答案 0 :(得分:13)
两种可能的解决方案(不使用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);
答案 1 :(得分:4)
在PHP daniele centamore's comment函数上查看array_splice(),其中提供了一些用于移动非关联数组中元素的函数。
<?php
// $input (Array) - the array containing the element
// $index (int) - the index of the element you need to move
function moveUp($input,$index) {
$new_array = $input;
if((count($new_array)>$index) && ($index>0)){
array_splice($new_array, $index-1, 0, $input[$index]);
array_splice($new_array, $index+1, 1);
}
return $new_array;
}
function moveDown($input,$index) {
$new_array = $input;
if(count($new_array)>$index) {
array_splice($new_array, $index+2, 0, $input[$index]);
array_splice($new_array, $index, 1);
}
return $new_array;
}
$input = array("red", "green", "blue", "yellow");
$newinput = moveUp($input, 2);
// $newinput is array("red", "blue", "green", "yellow")
$input = moveDown($newinput, 1);
// $input is array("red", "green", "blue", "yellow")
?>
答案 2 :(得分:1)
PHP有13 functions for sorting arrays,按键,按值,按用户定义的函数,您可以指定“one”在“two”之前。还有array_shift,array_unshift,array_push和array_pop,用于将数据移入或移出数组的前端或末端。您可以从现有阵列构建一个全新的阵列。
答案 3 :(得分:1)
这是一个有效的例子:
<?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
)
答案 4 :(得分:-1)
我认为,你应该使用asort功能:
$data = array('two' => 2, 'one' => 1, 'three' => 3);
$dataOrdered = $data;
asort($dataOrdered);