1. 程式人生 > >PHP之陣列函式歸類

PHP之陣列函式歸類

陣列鍵值特性

key 可以是 integer 或者 string。value 可以是任意型別。
此外 key 會有如下的強制轉換:

包含有合法整型值的字串會被轉換為整型。例如鍵名 “8” 實際會被儲存為 8。但是 “08” 則不會強制轉換,因為其不是一個合法的十進位制數值。 浮點數也會被轉換為整型,意味著其小數部分會被捨去。例如鍵名 8.7 實際會被儲存為 8。
布林值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0。 Null 會被轉換為空字串,即鍵名
null 實際會被儲存為 “”。 陣列和物件不能被用為鍵名。堅持這麼做會導致警告:Illegal offset type。

$array = array(
    1     => "a",
    "1"   => "b",
    1.5   => "c",
    1.999 => "c",
    TRUE  => "d",
    FALSE => FALSE,
    NULL  => NULL,
    0     => 'false',
);
var_dump($array);
/*array (size=3)
    1 => string 'd' (length=1)
    0 => string 'false' (length=5)
    '' => null
* */
// 建立一個簡單的陣列
$array = array(1, 2, 3, 4, 5);
var_dump($array);

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

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

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

一、鍵/值處理

array_values()

array array_values ( array $array )
返回陣列中的值並給其建立數字索引

array_keys

array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
array_keys() 返回 input 陣列中的數字或者字串的鍵名。
如果指定了可選引數 search_value,則只返回該值的鍵名。否則 input 陣列中的所有鍵名都會被返回。
    $array = array(0 => 100, "color" => "red", 'null' => NULL, NULL, 'false' => FALSE);
    var_dump(array_keys($array), array_keys($array, NULL), array_keys($array, NULL, TRUE));
    /*
     * array (size=5)
        0 => int 0
        1 => string 'color' (length=5)
        2 => string 'null' (length=4)
        3 => int 1
        4 => string 'false' (length=5)

      array (size=3)
        0 => string 'null' (length=4)
        1 => int 1
        2 => string 'false' (length=5)

      array (size=2)
        0 => string 'null' (length=4)
        1 => int 1
     * */

array_change_key_case

array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )
array_change_key_case() 將 array 陣列中的所有鍵名改為全小寫或大寫--CASE_UPPER 或 CASE_LOWER。本函式不改變數字索引。
如果輸入值(array)不是一個數組,錯誤警告(E_WARNING),返回FALSE
如果一個數組中的多個鍵名經過本函式後變成一樣的話(例如 "keY""kEY"),最後一個值將覆蓋其它的值。
//遞迴改變鍵名的大小寫
function array_change_key_case_recursive($arr)
{
    return array_map(function($item){
        if(is_array($item))
            $item = array_change_key_case_recursive($item);
        return $item;
    },array_change_key_case($arr));
}

array_column

array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )
array_column() 返回input陣列中鍵值為column_key的列, 如果指定了可選引數index_key,那麼input陣列中的這一列的值將作為返回陣列中對應值的鍵。
input
需要取出陣列列的多維陣列。 如果提供的是包含一組物件的陣列,只有 public 屬性會被直接取出。 為了也能取出 privateprotected 屬性,類必須實現 __get() 和 __isset() 魔術方法。

column_key
需要返回值的列,它可以是索引陣列的列索引,或者是關聯陣列的列的鍵,也可以是屬性名。 也可以是NULL,此時將返回整個陣列(配合index_key引數來重置陣列鍵的時候,非常管用)

index_key
作為返回陣列的索引/鍵的列,它可以是該列的整數索引,或者字串鍵值。
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

$first_names = array_column($records, 'first_name');
print_r($first_names);//數字索引,依次各個‘first_name’
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);//'id'為索引,依次各個‘first_name’
$null_names = array_column($records, null,'first_name');
print_r($null_names);//'first_name'為索引的二維陣列
$index_key = array_column($null_names, null);
print_r($index_key);//關聯索引轉變為數字索引

in_array/array_search

判斷值是否在陣列中,注意預設為不嚴格的比較,不對型別作檢查,只要能轉為相同的值就可以

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
大海撈針,在大海(haystack)中搜索針( needle),如果沒有設定 strict 則使用寬鬆的比較

mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )
大海撈針,在大海(haystack)中搜索針( needle 引數)
// Example array
// 實際生產中陣列中多以字串、數字,以下情況較少見
$array = array(
    'egg' => true,
    'cheese' => false,
    'hair' => 765,
    //'goblins' => null,
    'ogres' => 'no ogres allowed in this array'
);

// Loose checking -- 鬆散比較,型別轉換
var_dump(in_array(0, ['a', 'b', 'c']));
var_dump(in_array(null, $array)); // true null==false
var_dump(in_array(false, $array)); // true false==false
var_dump(in_array(765, $array)); // true 765==true
echo '----';
var_dump(in_array(7630, $array)); // true 7630==true
var_dump(in_array('egg', $array)); // true  'egg'==true
var_dump(in_array('hhh', $array)); // true  'hhh'==true
var_dump(in_array(array(1,2,3), $array)); // true 
var_dump(in_array(array(), $array)); // true
echo '----';
// Strict checking

var_dump(in_array(null, $array, true)); // true
var_dump(in_array(false, $array, true)); // true
var_dump(in_array(765, $array, true)); // true
var_dump(in_array(763, $array, true)); // false
var_dump(in_array('egg', $array, true)); // false
var_dump(in_array('hhh', $array, true)); // false
var_dump(in_array(array(), $array, true)); // false
//查詢數字,將陣列中字串轉為數字後比較
$test_array = array('test', '1234abcd','0xA','1e3');
var_dump(in_array(1234, $test_array));//true
var_dump(in_array('1234', $test_array));//false
var_dump(in_array(10, $test_array));//true
var_dump(in_array(1000, $test_array));//true

//不區分大小寫in_array
in_array(strtolower($needle), array_map('strtolower', $haystack));

array_key_exists

bool array_key_exists ( mixed $key , array $array )
數組裡有鍵 key 時,array_key_exists() 返回 TRUE。 key 可以是任何能作為陣列索引的值。
//Very simple case-insensitive array_key_exists
bool (in_array(strtolower($needle), array_map('strtolower', array_keys($haystack))))

array_flip

array array_flip ( array $array )
array_flip() 返回一個反轉後的 array,例如 array 中的鍵名變成了值,而 array 中的值成了鍵名。
注意 array 中的值需要能夠作為合法的鍵名(例如需要是 integer 或者 string)。如果型別不對,將出現一個警告,並且有問題的鍵/值對將不會出現在結果裡。
如果同一個值出現多次,則最後一個鍵名將作為它的值,其它鍵會被丟棄。

array_reverse

array array_reverse ( array $array [, bool $preserve_keys = false ] )
array_reverse() 接受陣列 array 作為輸入並返回一個單元為相反順序的新陣列。
preserve_keys 如果設定為 TRUE 會保留數字的鍵。 非數字的鍵則不受這個設定的影響,總是會被保留。

array_count_values

返回每個值出現的次數,鍵名為該值

array array_count_values ( array $array )
返回一個關聯陣列,用 array 陣列中的值作為鍵名,該值在陣列中出現的次數作為值。
對數組裡面的每個不是 stringinteger 型別的元素丟擲一個警告錯誤(E_WARNING)。

三、拆分合並填充

array_chunk

array array_chunk ( array $array , int $size [, bool $preserve_keys = false ] )
將一個數組分割成多個數組,其中每個陣列的單元數目由 size 決定。最後一個數組的單元數目可能會少於 size 個。最後各個陣列整合在一起形成二維陣列返回
preserve_keys 設為 TRUE,可以使 PHP 保留輸入陣列中原來的鍵名。如果你指定了 FALSE,那每個結果陣列將用從零開始的新數字索引。預設值是 FALSE。

得到的陣列是一個多維陣列中的單元,其索引從零開始,每一維包含了 size 個元素。
如果 size 小於 1,會丟擲一個 E_WARNING 錯誤並返回 NULL。
如果 size 大於等於原陣列長度:二維陣列,[ 0=>[0=>[...],1=>[...],2=>[...]] ]
//arr,m,n,m行n列
$m=6;
$n=9;
$arr=range(1,$m*$n);
$mTmp=$nTmp=0;
$data=[];
$arrow=['right','down','left','up'];
$flag=0;
foreach($arr as $k=>$v){
  $data[$mTmp][$nTmp]=$v;
  if($arrow[$flag%4]=='right'){
    $nTmp++;
    if(isset($data[$mTmp][$nTmp+1]) || $nTmp==$n-1){
      $flag++;
    }
  }elseif($arrow[$flag%4]=='down'){
    $mTmp++;
    if(isset($data[$mTmp+1][$nTmp]) || $mTmp==$m-1){
      $flag++;
    }
  }elseif($arrow[$flag%4]=='left'){
    $nTmp--;
    if(isset($data[$mTmp][$nTmp-1]) || $nTmp==0){
      $flag++;
    }
  }elseif($arrow[$flag%4]=='up'){
    $mTmp--;
    if(isset($data[$mTmp-1][$nTmp]) || $mTmp==0){
      $flag++;
    }
  }
}

for($row=0;$row<$m;$row++){
  for($col=0;$col<$n;$col++){
    printf('[%2s]',$data[$row][$col]);
  }
  echo '<br>';
}

array_slice

從陣列中切一段返回,注意傳入偏移、長度引數的正負,偏移為正則從陣列左邊開始,為負則從末端倒數這麼多個開始。長度為正則切出這麼多個,為負則切到末端倒數到這個長度值為止

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
array_slice() 返回根據 offset 和 length 引數所指定的 array 陣列中的一段序列。
preserve_keys 注意 array_slice() 預設會重新排序並重置陣列的數字索引。你可以通過將 preserve_keys 設為 TRUE 來改變此行為。(關聯陣列不變)

array_splice

從陣列中切出一段,要麼刪除,要麼用其他值代替刪除的一部分,注意傳入偏移和長度引數的正負

array array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] )
把 input 陣列中由 offsetlength 指定的單元去掉,如果提供了 replacement 引數,則用其中的單元取代。
注意 input 中的數字鍵名不被保留。
offset
如果 offset 為正,則從 input 陣列中該值指定的偏移量開始移除。如果 offset 為負,則從 input 末尾倒數該值指定的偏移量開始移除。

length
如果省略 length,則移除陣列中從 offset 到結尾的所有部分。如果指定了 length 並且為正值,則移除這麼多單元。如果指定了 length 並且為負值,則移除從 offset 到陣列末尾倒數 length 為止中間所有的單元。 如果設定了 length 為零,不會移除單元。 小竅門:當給出了 replacement 時要移除從 offset 到陣列末尾所有單元時,用 count($input) 作為 length。

replacement
如果給出了 replacement 陣列,則被移除的單元被此陣列中的單元替代。
如果 offsetlength 的組合結果是不會移除任何值,則 replacement 陣列中的單元將被插入到 offset 指定的位置。 注意替換陣列中的鍵名不保留。
如果用來替換 replacement 只有一個單元,那麼不需要給它加上 array(),除非該單元本身就是一個數組、一個物件或者 NULL。

array_unique

將重複值歸併為一個,非嚴格判斷

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

注意鍵名保留不變。array_unique() 先將值作為字串排序,然後對每個值只保留第一個遇到的鍵名,接著忽略所有後面的鍵名。這並不意味著在未排序的 array 中同一個值的第一個出現的鍵名會被保留。
Note: 當且僅當 (string) $elem1 === (string)$elem2 時兩個單元被認為相同。 例如,字串表達一樣時,會使用首個元素。

$input = array(4, "4", "3", 4, 3, "3",null,false,0);
$result = array_unique($input);//預設SORT_STRING - 按照字串形式比較
$result_numeric = array_unique($input,SORT_NUMERIC);//SORT_NUMERIC - 按照數字形式比較
var_dump($result,$result_numeric,(string)null,(string)false,(string)0);

/*
array (size=4)
  0 => int 4
  2 => string '3' (length=1)
  6 => null
  8 => int 0

array (size=3)
  0 => int 4
  2 => string '3' (length=1)
  6 => null
*/

array_combine

array array_combine ( array $keys , array $values )
返回一個 array,用來自 keys 陣列的值作為鍵名,來自 values 陣列的值作為相應的值。
返回合併的 array,如果兩個陣列的單元數不同,將會丟擲一個警告錯誤(E_WARNING),返回 FALSE

implode

將陣列連線為一個字串

string implode ( string $glue , array $pieces )
string implode ( array $pieces )
用 glue(預設為空字串) 將一維陣列的值連線為一個字串。
因為歷史原因,implode() 可以接收兩種引數順序,但是 explode() 不行。

explode

array explode ( string $delimiter , string $string [, int $limit ] )
此函式返回由字串組成的陣列,每個元素都是 string 的一個子串,它們被字串 delimiter 作為邊界點分割出來。
limit
如果設定了 limit 引數並且是正數,則返回的陣列包含最多 limit 個元素,而最後那個元素將包含 string 的剩餘部分。
如果 limit 引數是負數,則返回除了最後的 -limit 個元素外的所有元素。
如果 limit 是 0,則會被當做 1。
如果 delimiter 為空字串(""),explode() 將返回 FALSE。 如果 delimiter 所包含的值在 string 中找不到,並且使用了負數的 limit , 那麼會返回空的 array, 否則返回包含 string 單個元素的陣列。

array_merge

array array_merge ( array $array1 [, array $... ] )
array_merge() 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作為結果的陣列。
如果輸入的陣列中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果陣列包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
如果只給了一個數組並且該陣列是數字索引的,則鍵名會以連續方式重新索引。

array_merge_recursive

遞迴合併,即當陣列中元素仍為陣列時,繼續執行並操作,注意此時相同的字串鍵名的元素會合併到同一個陣列中去,整數索引的元素仍為附加

array_pad

用指定值將陣列填充到指定長度,指定長度小於本身長度時不作處理

$b = array('1229600459'=>'large', '0x45'=>20, 1229609459=>'red','44'=>44);
var_dump(array_pad($b, count($b)+1, 'foo'));//加在最後一個,所有數字索引鍵值從0順序重排
var_dump(array_pad($b, -(count($b)+1), 'foo'));//加在第一個,所有數字索引鍵值從0順序重排

var_dump($b);
array_unshift($b,'unshift');//加在第一個 0,所有索引鍵值從0順序重排
var_dump($b);
$b = array('1229600459'=>'large', '0x45'=>20, 1229609459=>'red','44'=>44);
array_push($b,'push');//索引鍵值,最大的索引鍵值加1
var_dump($b);

array_fill

array array_fill ( int $start_index , int $num , mixed $value )
array_fill() 用 value 引數的值將一個數組填充 num 個條目,鍵名由 start_index 引數指定的開始。

array_fill_keys

array array_fill_keys ( array $keys , mixed $value )
使用 value 引數的值作為值,使用 keys 陣列的值作為鍵來填充一個數組。
keys 使用該陣列的值作為鍵。非法值將被轉換為字串。

五、集合運算

array_diff

差集,僅比較值

array_diff(A,B) returns all elements from A, which are not elements of B (= A without B).
兩個單元僅在 (string) $elem1 === (string) $elem2 時被認為是相同的。也就是說,當字串的表達是一樣的時候。
注意本函式只檢查了多維陣列中的一維。當然可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。

array_diff_key

差集,僅比較鍵

array_diff_assoc

差集,比較鍵和值,即當鍵與值均相同時才被認為是同樣的元素。判斷同與不同均執行嚴格的全等於檢查

array_diff_ukeys

使用使用者自定義函式,通過鍵名比較,帶u的表示user,即使用者自定義的比較形式

array_diff_uassoc

自定義函式,鍵和值比較差值運算

array_intersect

交集運算,類上
array_intersect_key
array_intersect_assoc
array_intersect_ukey
array_intersect_uassoc
對於差集和交集,還有用回撥函式處理值的(array_udiff),或同時使用兩個回撥函式來處理鍵和值(array_udiff_uassoc、array_uintersect_uassoc)等等。

六、類資料結構處理

array_push 從陣列末尾新增元素,可一次新增多個
array_pop 從末端彈出一個元素
array_shift 從頭部彈出一個元素
array_unshift 從頭部新增一個元素
以上函式就可以模擬棧、佇列等結構

$arr=[1,2,3,4,5];
next($arr);
var_dump(current($arr));//int 2
//array_pop($arr);  //var_dump(current($arr)); 結果 int 1 重置指標
//array_push($arr,'push');   //var_dump(current($arr)); 結果 int 2 未重置指標
//array_shift($arr);   //var_dump(current($arr)); 結果 int 2 重置指標
array_unshift($arr,'unshift');   //var_dump(current($arr)); 結果 string 'unshift' (length=7) 重置指標
var_dump(current($arr));

七、使用回撥函式

array_reduce

mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )
使用自定義函式將陣列中的值轉化為一個值,比如相乘、相加等

function sum($carry, $item)//累加器,陣列的每一個值
{
    $carry += $item;
    return $carry;
}

function product($carry, $item)
{
    $carry *= $item;
    return $carry;
}

$a = array(1, 2, 3, 4, 5);
$x = array();

var_dump(array_reduce($a, "sum")); // int(15)
var_dump(array_reduce($a, "product", 10)); // int(1200), because: 10*1*2*3*4*5,類似累加器$carry初始值為10
var_dump(array_reduce($x, "sum", "No data to reduce")); // string(17) "No data to reduce"

array_walk

對陣列中每個元素使用回撥函式遍歷一遍

array_walk_recursive

上面的遞迴版本,子元素為陣列時,將子元素中的每一個元素再使用回撥函式處理一遍

array_filter

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次將 array 陣列中的每個值傳遞到 callback 函式。如果 callback 函式返回 true,則 array 陣列的當前值會被包含在返回的結果陣列中。陣列的鍵名保留不變。
callback
使用的回撥函式
如果沒有提供 callback 函式, 將刪除 array 中所有等值為 FALSE 的條目。更多資訊見轉換為布林值。

flag
決定callback接收的引數形式:
ARRAY_FILTER_USE_KEY - callback接受鍵名作為的唯一引數
ARRAY_FILTER_USE_BOTH - callback同時接受鍵名和鍵值

array_map

可以傳遞多個數組,回撥函式的引數個數需與陣列引數個數保持一致,遍歷處理時引數與陣列引數順序一一對應,返回回撥處理後的一維陣列。如果陣列元素不夠將以空代替

array array_map ( callable $callback , array $array1 [, array $... ] )
array_map():返回陣列,是為 array1 每個元素應用 callback函式之後的陣列。 callback 函式形參的數量和傳給 array_map() 陣列數量,兩者必須一樣。

八、排序函式

sort 升序排列,可以更改各種排序模式
rsort 降序排列(r:reverse,顛倒,倒置,即反向的意思)
usort 使用使用者自定義函式排序(user)
asort 升序排列,保持原索引不變(association)
arsort 類上的降序排列
uasort 使用者自定義函式升序排列,保持原鍵名
ksort 按照鍵名,升序排列(key)
uksort 使用使用者自定義函式,按照鍵名升序排列
krsort 按照鍵名,降序排列
natsort 使用自然排序法進行升序排列
natcasesort natsort不區分大小寫的版本
array_multisort 對多個或多維陣列排序,實現多個或多維陣列聯動排序,可達到SQL語句的order by多個欄位的效果

九、其他函式

range

array range ( mixed s t a r t , m i x e d end [, number $step = 1 ] )
建立一個包含指定範圍單元的索引陣列。

shuffle

bool shuffle ( array &$array )
本函式打亂(隨機排列單元的順序)一個數組。

array_rand

mixed array_rand ( array a r r a y [ , i n t num = 1 ] )
(陣列,個數);隨機地從陣列內取得元素,取得是下標!

array_sum

求陣列中的所有值的和

echo array_sum(array(1,'22','3ab','1e3'));//1026
echo array_sum(array('0xA','011',011));//30 10+11+9

array_product

求陣列中所有值得積

$a = array(2, 4, 6, 8);
echo "product(a) = " . array_product($a) . "\n";
echo "product(array()) = " . array_product(array()) . "\n";

count/sizeof

int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )
array_or_countable
陣列或者 Countable 物件。

mode
如果可選的 mode 引數設為 COUNT_RECURSIVE(或 1),count() 將遞迴地對陣列計數。對計算多維陣列的所有單元尤其有用。

如果引數既不是陣列,也不是實現 Countable 介面的物件,將返回 1。 有個例外:如果 array_or_countable 是 NULL 則結果是 0

指標

$arr1=[1,2,3];
next($arr1);
$arr2=$arr1;
var_dump(current($arr2));
//---------------------------

$arr1=[1,2,3];
end($arr1);
next($arr1);//非法了
$arr2=$arr1;//值傳遞 COW 寫時複製copy on write
//注意,current也會發出寫操作,導致空間被複制!先current誰,誰是那個新的,指標被初始化!
var_dump(current($arr2));// 1
echo '<br>';
var_dump(current($arr1));// false
//------------------------------------

$arr1=[1,2,3];
end($arr1);
next($arr1);//非法了
$arr2=$arr1;

var_dump(current($arr1));// 1
echo '<br>';
var_dump(current($arr2));// false
//------------------------------------

$arr1=[1,2,3];
end($arr1);
next($arr1);//非法了
$arr2=$arr1;

$arr2[]=4;//$arr 改了,開闢新空間存新陣列,讓$arr2使用新空間,指標被初始化
var_dump(current($arr1));// false
echo '<br>';
var_dump(current($arr2));// 1

陣列索引重排

二維陣列,數字索引、關聯索引混合,全部變為數字索引

array_values、array_column、array_chunk、array_splice、sort、rsort、shuffle

$records = array(
    'John'=>array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    'Sally'=>array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
);

$records[10]=    array(
        'id' => 56238,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    );

var_dump($records);

$index_key = array_column($records, null);
var_dump($index_key);

$index_key2=array_chunk($records,count($records));
var_dump($index_key2[0]);

$empty=[];
array_splice($empty,0,0,$records);
var_dump($empty);

$index_key4=$records;
array_splice($index_key4,0,count($index_key4),$index_key4);
var_dump($index_key4);

var_dump(array_values($records));

$index_key5=$records;
var_dump(shuffle($index_key5),$index_key5);

$index_key6=$records;
var_dump(sort($index_key6),$index_key6);

一維陣列,數字索引、關聯索引混合,全部變為數字索引

$records=[0,’one’=>’one’,’two’=>’two’,’three’=>’three’,4,’10’=>10];
去除array_column,其餘同上

一維陣列,只有數字索引,對數字索引從0重排

array_values、array_merge、 shuffle、sort、rsort
array_chunk array_reverse array_pad array_pop array_unshift array_shift
array_slice array_splice

$records=['2'=>0,'one','two','three',4,'10'=>10];

var_dump(array_merge($records));

$records1=array_pad($records,count($records)+1,null);
array_pop($records1);
var_dump($records1);

var_dump(array_reverse($records));

$records2=$records;
array_unshift($records2,null);
array_shift($records2);
var_dump($records2);

var_dump(array_slice($records,0));

$records3=$records;
array_splice($records3,0,0);
var_dump($records3);

$records4=$records;
$records5=array_splice($records4,0);
var_dump($records5);

對陣列原值操作(引用傳遞)

排序類(sort shuffle)、隊棧操作(push pop unshift shift)、array_splice、array_walk

array_walk($arr,function($v,$k){});
array_walk($arr,function($v,$k,$userdata){},$userdata);
array_walk($arr,
            
           

相關推薦

PHP陣列函式歸類

陣列鍵值特性 key 可以是 integer 或者 string。value 可以是任意型別。 此外 key 會有如下的強制轉換: 包含有合法整型值的字串會被轉換為整型。例如鍵名 “8” 實際會被儲存為 8。但是 “08” 則不會強制轉換,因為其不是一個合法的十進位制數

PHP陣列函式

PHP之陣列函式(一) array_combine(array $keys , array $values); 描述:生成一個數組,用一個數組的值作為鍵名,另一個數組的值作為值 引數: 例子: <?php $a =

php 陣列函式

array() 建立陣列。 array_change_key_case() 把陣列中所有鍵更改為小寫或大寫。 array_chunk() 把一個數組分割為新的陣列塊。

php 字串函式

addcslashes() 返回在指定的字元前新增反斜槓的字串。 addslashes() 返回在預定義的字元前新增反斜槓的字串。 bin2hex() 把 ASCII 字元的字串轉換為十六進位制

PHP 手冊 >陣列 函式】array_diff

array_diff (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_diff — 計算陣列的差集 說明 array array_diff ( array $array1

PHP 手冊 >陣列 函式】array_key_first,array_key_last

(PHP 7 >= 7.3.0) array_key_first — 獲得陣列的第一個鍵名(使用時注意php版本) 說明 mixed array_key_first ( array $array

php初識函式

目錄 簡介 函式的結構 函式的特性 複雜函式 簡介 為了提高開發效率,提升程式碼的可維護性,相同操作的程式碼可以封裝成一個函式(方法) 函式的結構 關鍵字 function 函式名,以字母下劃線開頭,數字字母下劃線組成,例如:getLastSql 引

第六招 PHP陣列

陣列型別   關聯陣列 關聯陣列的鍵值由字串或字串和數字組合。 <?php $students=['student1'=>'brell','student2'=>'lwqbrell']; var_dump($students); ?> 索引陣

PHP 手冊 >陣列 函式】array_multisort

(PHP 4, PHP 5, PHP 7) array_multisort — 對多個數組或多維陣列進行排序 說明 bool array_multisort ( array &$array1 [, mixed $array1_sort_order =

php常用陣列函式總結

陣列函式1.array_key_change_case($arr,$case):將陣列所有的鍵轉化為大寫或者小寫,$case可設為CASE_LOWER或者CASE_UPPER。2.array_chunk($arr,$number):把陣列分割為有特定($number)個元素的

PHP 手冊 >陣列 函式】array_merge_recursive,array_merge

【1】 array_merge_recursive 與 【2】 array_merge 異: 合併的陣列中有相同的字串鍵名時, 【1】 以該鍵名構建二維陣列,連續的數字索引為二維鍵名依次排序鍵值; 【2】鍵名不變,後者鍵值覆蓋前者 同: 合併的陣列中有

PHP常用陣列函式

array_change_key_case(array,case); 引數 描述 array 必需。規定要使用的陣列。 case 可選。可能的值: CASE_LOWER - 預設值。將陣列的

php陣列函式序列array_unique()

array_unique() 定義和用法 array_unique() 函式移除陣列中的重複的值,並返回結果陣列。  當幾個陣列元素的值相等時,只保留第一個元素,其他的元素被刪除。  返回的陣列中鍵名不變。  語法  array_unique(array)  引數 描述  array 必需。規定輸入的陣列。

php陣列學習in_array() 函式查詢陣列中是否存在某個值

   下面給給同學們介紹一下php陣列的內建函式in_array(). bool in_array ( mixed needle, array haystack [, bool strict]) 第一個引數:needle是要查詢的值,值可以是數字也可以是字串,當是字串時候,是區分大小寫。 第二個引數:hays

PHP陣列函式常用匯總

一、is_array():判斷變數是否為陣列;// is_string 判斷是否為字元  is_numeric:數字或數字字串       用法:is_array(變數);//是陣列返回 true,不是返回false 實際應用:在迴圈陣列之前先判斷是否為陣

資料結構實驗陣列三:快速轉置(std::stable_sort函式

資料結構實驗之陣列三:快速轉置 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description   轉置

array_map 等php回撥函式使用問題(關聯陣列下標獲取)

前言:我自己用此類回撥函式,來替代 foreach 純粹是用為程式碼的簡潔性,讓程式碼更好看。(我有點程式碼小潔癖~) 1、array_reduce 當迭代處理一個一維索引陣列時,在回撥函式內是無法獲取到當時元素索引的。所以想要獲取時,需得藉助一個外部變數。 目的:把 $arr 遍歷到 <sele

PHP處理陣列常用函式和使用案例(PHP Array)

PHP Array簡介,陣列函式允許您訪問和運算元組。支援單維和多維陣列。安裝 陣列函式屬於 PHP 核心部分。無需安裝即可使用這些函式。 array_search — 在陣列中搜索給定的值,如果成功則返回相應的鍵名 <?php   $array 

php陣列函式和字串函式

字串: 陣列:array_walk(), array_filter(),array_multisort() ,array_shift() 字串示例: 陣列示例: array_walk() 函式對陣列中的每個元素應用使用者自定義函式。在函式中,陣列的鍵名和鍵值是引數。 $a

c++ primer plus書--c++函式, 陣列引數與指標的關係2

陣列怎麼在函式的引數中進行傳遞: // simple function #include "iostream" using namespace std; const int Size = 8; // 函式原型, 可以不寫變數名, 變數名也可以與函式定義的變數名不同 int sum_arr(in