PHP學習之數組Array操作和鍵值對操作函數(一)


  PHP 中的數組實際上是一個有序映射。映射是一種把 values關聯到 keys 的類型。此類型在很多方面做了優化,因此可以把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。由於數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。

  在PHP中,數組的每個元素都是由“鍵=>值”組成的,通過元素的鍵來訪問對應的鍵的值。“關聯數組”指的是鍵名為字符串的數組,“索引”和“鍵名“指的是同一樣東西。”索引“多指數組的數字形式的下標。使用數組的處理函數,可以很方便的對數組中的每個元素的鍵和值進行操作。

  1定義數組array()

  可以用array()結構來新建一個數組,接受任意數量用逗號分隔的 鍵(key)=>值(value)對,其中鍵(key)可以是一個整數integer或者字符string,值(value)可以使任意類型的值。自PHP5.4起可以使用短數組定義語法,用[]替代array()。

<?php
    $array=array(
        "foo"=>"bar",
        "bar"=>"foo"
        ); 

    $array=[          //自從PHP5.4以后。
        "foo"=>"bar",
        "bar"=>"foo",
    ];
?>

  key還會有如下的強制轉換:

  • 包含有合法整型值的字符串會被轉換為整型。例如鍵名 "8" 實際會被儲存為 8。但是 "08"則不會強制轉換,因為其不是一個合法的十進制數值。
  • 浮點數也會被轉換為整型,意味着其小數部分會被舍去。例如鍵名 8.7 實際會被儲存為 8
  • 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1而鍵名 false 會被儲存為 0
  • Null 會被轉換為空字符串,即鍵名 null 實際會被儲存為 ""
  • 數組和對象不能被用為鍵名。堅持這么做會導致警告:Illegal offset type。    
  • 如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最后一個,之前的都被覆蓋了。
<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?> 

以上例子會輸出:

array(1) {
  [1]=>
  string(1) "d"
}

還可以只對某些單元指定鍵名而對其它的空置:

<?php
$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);
var_dump($array);
?>


以上例子輸出

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

  自PHP 5.4 起可以用數組間接引用函數或方法調用的結果。之前只能通過一個臨時變量,自 PHP 5.5 起可以用數組間接引用一個數組原型。

<?php
function getArray() {
    return array(1, 2, 3);
}

// on PHP 5.4
$secondElement = getArray()[1];

// previously
$tmp = getArray();
$secondElement = $tmp[1];

// or
list(, $secondElement) = getArray();
?>

  要修改某個值,通過其鍵名給該單元賦一個新值。要刪除某鍵值對,對其調用 unset() 函數。

<?php
$arr = array(5 => 1, 12 => 2);

$arr[] = 56;    //相當於增加了一個$arr[13] = 56;


$arr["x"] = 42; //增加一個新元素,鍵key=’x‘
                
unset($arr[5]); //刪除數組中5=>1

unset($arr);    // 刪除整個數組
?>

  

  如果給出方括號但沒有指定鍵名,則取當前最大整數索引值,新的鍵名將是該值加上 1(但是最小為 0)。如果當前還沒有整數索引,則鍵名將為 0。注意這里所使用的最大整數鍵名不一定當前就在數組中。它只要在上次數組重新生成索引后曾經存在過就行了。以下面的例子來說明:

<?php
// 創建一個簡單的數組
$array = array(1, 2, 3, 4, 5);
print_r($array);

// 現在刪除其中的所有元素,但保持數組本身不變:
foreach ($array as $i => $value) {
    unset($array[$i]);
}
print_r($array);

// 添加一個單元(注意新的鍵名是 5,而不是你可能以為的 0)
$array[] = 6;
print_r($array);

// 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>

 

以上例子會有如下輸出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

  

 2.is_array()  
  is_array — 檢測變量是否是數組,bool is_array ( mixed $var ),如果 vararray,則返回 TRUE,否則返回 FALSE.

   3.explode()

  explode——使用一個字符串分割另一個字符串。array explode ( string $delimiter , string $string [, int $limit ] ),此函數返回由字符串組成的數組,每個元素都是 string的一個子串,它們被字符串 delimiter作為邊界點分割出來。delimiter 邊界上的分割字符,string輸入的字符串,如果設置了 limit參數並且是正數,則返回的數組包含最多 limit個元素,而最后那個元素將包含 string的剩余部分。如果 limit參數是負數,則返回除了最后的 -limit個元素外的所有元素。如果 limit 是 0,則會被當做 1。

<?php
$str = 'one|two|three|four';

// 正數的 limit
print_r(explode('|', $str, 2));

// 負數的 limit(自 PHP 5.1 起)
print_r(explode('|', $str, -1));
?>

以上例子會有如下輸出

Array
(
    [0] => one
    [1] => two|three|four
)
Array
(
    [0] => one
    [1] => two
    [2] => three
)

  4.implode()

  implode — 將一個一維數組的值轉化為字符串

<?php

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

echo $comma_separated; // lastname,email,phone

// 當數組為空時,返回的字符串也是空
var_dump(implode('hello', array())); // string(0) ""

?> 

  5.split

  split — 用正則表達式將字符串分割到數組中,array split ( string $pattern , string $string [, int $limit ] ),本函數返回一個字符串數組,每個單元為 string 經區分大小寫的正則表達式 pattern 作為邊界分割出的子串。如果設定了 limit,則返回的數組最多包含 limit 個單元,而其中最后一個單元包含了 string 中剩余的所有部分。如果出錯,則 split() 返回 FALSE

<?php
// 分隔符可以是斜線,點,或橫線
$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";
?> 

  6.preg_split()

  preg_split — 通過一個正則表達式分隔字符串,array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ),pattern用於搜索的模式,字符串形式。subject輸入字符串

limit如果指定,將限制分隔得到的子串最多只有limit個,返回的最后一個 子串將包含所有剩余部分。limit值為-1, 0或null時都代表"不限制", 作為php的標准,你可以使用null跳過對flags的設置。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM