簡體   English   中英

php關聯數組鍵順序(非排序)

[英]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")

?>

ksortuksort

這是一個工作示例:

<?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

PHP 有13 個用於按鍵、按值、按用戶定義的函數對數組進行排序的函數,您可以在其中指定“一”在“二”之前。 還有 array_shift、array_unshift、array_push 和 array_pop 用於將事物移入或移出數組的前端或末端。 您可以從現有陣列構建一個全新的陣列。

我認為,你應該使用 asort 函數:

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

$dataOrdered = $data;
asort($dataOrdered);

運行此代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM