數組array的一些用法

array_filter

(PHP 4 >= 4.0.6, PHP 5, PHP 7) array_filter — 用回調函數過濾數組中的單元。(返回回調函數中返回true的元素,也就是過濾掉返回false的元素)數組

array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array

參數

  • array: 要循環的數組
  • callback:使用的回調函數

若是沒有提供 callback 函數, 將刪除 array 中全部等值爲 FALSE 的條目。更多信息見轉換爲布爾值。函數

  • flag: 決定callback接收的參數形式:code

    ARRAY_FILTER_USE_KEY - callback接受鍵名做爲的惟一參數three

    ARRAY_FILTER_USE_BOTH -ci

返回值

返回過濾後的數組。input

例子

使用回調函數時

獲取數組中的奇數偶數回調函數

//奇數
function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

//偶數
function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));``

採用位運算, 1的二進制比較特殊:最後一位偉1,其餘位都爲0,用位異或和1計算,因爲1的其餘位都是0,就看另一個數的最後1位是0仍是1,若是是0,則和1的最後一位&計算獲得的0,不然是1。string

和 1 進行 & 運算的巧用,由於1的除了最後一位是1外,其餘位置都是0,因此任何一個數字和1進行&運算,結果只有2種,要麼是1,要麼是0,由進行比較的數字的最後一位決定(因爲1的其餘位都是0,因此對位&計算後確定是0)io

不使用 callback 時的array_filter()

若是沒有提供 callback 函數, 將刪除 array 中全部等值爲 FALSE 的條目。function

$entry = array(
             0 => 'foo',
             1 => false,
             2 => -1,
             3 => null,
             4 => ''
          );

print_r(array_filter($entry));
帶 flag 標記的 array_filter()
$arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];

//只使用單個的鍵
var_dump(array_filter($arr, function($k) {
    return $k == 'b';
}, ARRAY_FILTER_USE_KEY));

//是用數組的值和鍵
var_dump(array_filter($arr, function($v, $k) {
    return $k == 'b' || $v == 4;
}, ARRAY_FILTER_USE_BOTH));

若是不用 flag 參數,而且function($v){},參數只有一個,是數組的值。因此回調函數中,能夠單個使用key,單個使用value,同時使用key和value。

array_map

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

array_map — 爲數組的每一個元素應用回調函數

array_map ( callable $callback , array $array1 [, array $... ] ) : array

array_map():返回數組,是爲 array1 每一個元素應用 callback函數以後的數組。 callback 函數形參的數量和傳給 array_map() 數組數量,二者必須同樣

參數

  • callback:回調函數,應用到每一個數組裏的每一個元素。
  • array1:數組,遍歷運行 callback 函數。
  • ... 數組列表,每一個都遍歷運行 callback 函數。

返回值

返回數組,包含 callback 函數處理以後 array1 的全部元素。

例子

單個數組
//全局函數
function cube($n)
{
    return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);

//匿名函數
$func = function($value) {
    return $value * 2;
};
print_r(array_map($func, range(1, 5)));
使用更多的數組
function show_Spanish($n, $m)
{
    return("The number $n is called $m in Spanish");
}

$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");

$c = array_map("show_Spanish", $a, $b);
print_r($c);

傳入兩個及以上的數組時,它們元素數量將會相同。由於回調函數會並行地處理相互對應的元素。 若是幾個數組的元素數量不一致:空元素會擴展短那個數組,直到長度和最長的數組同樣。

此函數有個有趣的用法:傳入 NULL 做爲回調函數的名稱,將建立多維數組(一個數組,內部包含數組。)

多維數組:建立數組,內部包含數組
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");

$d = array_map(null, $a, $b, $c);
print_r($d);``

以上例程會輸出:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )

    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => dos
        )

    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => tres
        )

    [3] => Array
        (
            [0] => 4
            [1] => four
            [2] => cuatro
        )

    [4] => Array
        (
            [0] => 5
            [1] => five
            [2] => cinco
        )

)

若是僅傳入一個數組,鍵(key)會保留;傳入多個數組,鍵(key)是整型數字的序列。

array_map() 鍵(key)是 string
arr = array("stringkey" => "value");
function cb1($a) {
    return array ($a);
}
function cb2($a, $b) {
    return array ($a, $b);
}
var_dump(array_map("cb1", $arr));
var_dump(array_map("cb2", $arr, $arr));
var_dump(array_map(null,  $arr));
var_dump(array_map(null, $arr, $arr));
?>

以上例程會輸出:

array(1) {
  ["stringkey"]=>
  array(1) {
    [0]=>
    string(5) "value"
  }
}
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "value"
    [1]=>
    string(5) "value"
  }
}
array(1) {
  ["stringkey"]=>
  string(5) "value"
}
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "value"
    [1]=>
    string(5) "value"
  }
}
相關文章
相關標籤/搜索