[英]php associative array key order (not sort)
我的陣列:
$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 內置函數接受一個 assoc 數組並創建一個表,但沒有提供排列列的方法。 這就是為什么我想移動源數組中的列。
兩種可能的解決方案(不使用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);
看看daniele centamore對 PHP 的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")
?>
這是一個工作示例:
<?php
$data = array('two' => 2, 'one' => 1, 'three' => 3);
print_r($data);
ksort($data);
echo "ksort:\n";
print_r($data);
uksort($data,'cmp');
echo "uksort:\n";
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
)
ksort:
Array
(
[one] => 1
[three] => 3
[two] => 2
)
uksort:
Array
(
[one] => 1
[two] => 2
[three] => 3
)
運行這個: http : //codepad.org/yAK1b1IP
我認為,你應該使用 asort 函數:
$data = array('two' => 2, 'one' => 1, 'three' => 3);
$dataOrdered = $data;
asort($dataOrdered);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.