PHP 會遍歷操作數(shù)組的方法

foreach() | list() | extract | array_map() | array_walk() | array_walk_recursive | array_filter() | array_rand() | array_product | array_sum | array_reduce |


foreach() 遍歷數(shù)組傳遞鍵名和鍵值操作,鍵值能夠做引用傳遞修改;
list() 遍歷數(shù)組,把數(shù)組的值賦值給變量;不能引用產(chǎn)地,不會修改原數(shù)組,返回原數(shù)組;


foreach()

遍歷數(shù)組的鍵名和鍵值操作;沒有返回值;

語法結(jié)構(gòu)匯總:
fearch(array $array as $val){} 操作鍵值;不會修改原數(shù)組;
fearch(array $array as &$val){} 引用變量 操作數(shù)組的鍵值,能夠修改鍵值
fearch(array $array as $key => $val){} 操作數(shù)組的鍵值和鍵名;不會修改原數(shù)組;
fearch(array $multi_array as list($a....) ){} 操作多維數(shù)組,而且第二層次的數(shù)組必須是索引數(shù)組;
fearch(array $multi_array as $key => list($a....)){} 操作多維數(shù)組,,而且第二層次的數(shù)組必須是索引數(shù)組;

語法結(jié)構(gòu)1:

foreach(array $array as $val){
$val ;
}
傳遞 鍵值 操作;不會修改原鍵值;

實(shí)例:

$a_name = ['bill','tom','jack']
foreach($a_name as $val){
    echo $val.' ';
}

output : bill tom jack;

語法結(jié)構(gòu)2:
foreach($array as &$val){
$val
}
傳遞 引用傳遞;操作會修改原數(shù)組;

實(shí)例:

$a_age = ['bill_age'=>33,'tom_age'=>20,'jack_age'=>40];
foreach($a_name as &$val){
  $val +=10;
}
修改后 $a_age = ['bill_age'=>43,'tom_age'=>30,'jack_age'=>50];

結(jié)構(gòu)語法3:
foreach($array as list($a....)){
$a
}
搭配 list() 直接操作二維數(shù)組,
實(shí)例:

$a_persional_info = array(
    'bill'=>array('bill','gates',30),
    'thomas=>array('thomas','jefferson',40)
)
foreach($a_personal_info as list($str_first_name,$str_last_name,$int_age)){
  echo $str_first_name.' . '.$str_last_name.' is '.$int_age.' years old ! <br/>';
}
output  : bill.gates is 30 years old! 
              thomas.jefferson is 40 years old! 

結(jié)構(gòu)語法4:
foreach($array as $key => $val){
$key ;
$val;
}
操作鍵名和鍵值;
實(shí)例:

$a_personal_info = array('name'=>'bill','job'=>'worker','age'=>33)
foreach($a_personal_info as $key => $val){
  echo $key.'=>'.$val.'<br/>';
}
output : name  => bill
         job   => worker
         age   => 33

結(jié)構(gòu)語法5:
foreach($array as $key => list($a..)){
$key;
$a;
}

實(shí)例:

$a_persional_info = array(
    'bill'=>array('bill','gates',30),
    'thomas=>array('thomas','jefferson',40)
)
foreach($a_personal_info as $key => list($str_f_name,$str_l_name,$int_age)){
  echo $key.' 的年紀(jì)是'. $int_age.' 歲!';
}
output   : bill 的年紀(jì)是30歲!
               thomas的年紀(jì)是40歲!

list()

把索引數(shù)組的鍵值賦值給變量;
返回原數(shù)組;

語法結(jié)構(gòu)1:
list(mixed $name_1,......) = array $array;
把 索引數(shù)組 里面的鍵值,賦值給變量;
PHP 7 賦值的順序從左到右;

實(shí)例:

list($name,$age,$job) = array('bill',33,'worker');
echo $name  => bill
     $age   => 33
     $job   => worker

語法結(jié)構(gòu)2:
list(mixed $name_1, , mixed $name_2) = array $array;
只獲取數(shù)組中指定部分,跳過不需要的部分;

實(shí)例:

list($name , ,$job) = array('bill',33,'worker');
echo $name.' is '.$job;

output : bill is worker

語法結(jié)構(gòu)3:嵌套使用
list($a,$b..list($aa,$bb...)) = array $array;

實(shí)例:

$a_brand_name = array('吉利','奇瑞',array('BMW','VOLVO'));
list($str_c_brand_name_1,$str_c_brand_name_2,list($str_g_brand_name_1,$str_g_brand_name_2)) = $a_brand_name;

echo $str_g_brand_name_1 

output  : BMW

語法結(jié)構(gòu)4:
list($a[0],$a[1]....) = array $array;
用數(shù)組捕獲鍵值;

實(shí)例:


$a_brand_name = array('吉利','奇瑞',array('BMW','VOLVO'));

list($a_car_brand[0],$a_car_brand[1],list($a_car_brand[2],$a_car_brand[3])) =$a_brand_name;

print_r($a_car_brand);

output :  Array ( [0] => 吉利 [1] => 奇瑞 [2] => BMW [3] => VOLVO )


extract()

把關(guān)聯(lián)數(shù)組的元素導(dǎo)入<a href='http://www.itdecent.cn/p/46f91cd5f67a'>當(dāng)前符號列表</a>中;
把鍵名當(dāng)做變量標(biāo)識符,鍵值賦值給變量;
如果鍵名當(dāng)做變量標(biāo)識符是一個非法的標(biāo)識符,那么不會被導(dǎo)出;

基礎(chǔ)語法:

int extract(array $array [,constant $flags = EXTRACT_OVERWRIT [,string $prefix]]);

-array $array 被操作的的數(shù)組;
-constant $flags 常數(shù),決定鍵名的轉(zhuǎn)化成變量的方式;
-EXTR_OVERWRIT 覆蓋已有變量;
-EXTR_SKIP 保留已有變量;
-EXTR_PREFIX_SAME 如已有同名變量,在同名變量前增加前綴;
-EXTR_PREFIX_ALL 在所有的鍵名前增加前綴;
-EXTR_PREFIX_INVALID 在非法鍵名前增加前綴;
-EXTR_IF_EXISTS 導(dǎo)出具有相同變量名的鍵名,同時覆蓋原有的;其他的不處理;
-EXTR_PREFIX_IF_EXISTS 導(dǎo)出具有變量的鍵名,同時在鍵名前增加前綴,成為一個新的變量;
-EXTR_REFS 導(dǎo)出的變量是數(shù)組鍵值的引用,隨數(shù)組的改變而改變;同時會覆蓋原有變量;
-string $prefix 添加前綴的字符串;

備注:

在增加的前綴同鍵名之間用 _ 下劃線連接;


語法結(jié)構(gòu)1:
int extract(array $array )

導(dǎo)出所有鍵名為變量名,同時覆蓋原有的變量;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill');
extract($a_bill_info);
echo $name;

#output : bill;

語法結(jié)構(gòu)2:
int extract(array $array ,EXTR_SKIP)

導(dǎo)出所有的鍵名為變量名,同已有變量名相沖突的是否,保留原有的變量;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill');
extract($a_bill_info,EXTR_SKIP);
echo $name;
#output : old_name;

語法結(jié)構(gòu)3:

int extract(array $array ,EXTR_PREFIX_SAME, string $prefix)

導(dǎo)出所有的鍵名為變量名,如果同已有變量相沖突,在沖突的鍵名前增加前綴,為新的變量;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill');
extract($a_bill_info,EXTR_PREFIX_SAME,'bill');
echo $bill_name;
#output : bill;

語法結(jié)構(gòu)4:
int extract(array $array ,EXTR_PREFIX_ALL ,string $prefix)

導(dǎo)出所有的鍵名為變量名,同時在所有的鍵名前增加前綴;
如果還有同名的變量名,那么覆蓋原有的;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill','age'=>20);
extract($a_bill_info, EXTR_PREFIX_ALL,'bill');

echo $name.'<br/>'.$bill_name.'<br/>'.$bill_age;

語法結(jié)構(gòu)5:

int extract(array $array ,EXTR_PREFIX_INVALID,string $prefix);

導(dǎo)出所有的鍵名為變量名,同時在非法的變量名前增加前綴;
如果有相同的變量名,那么覆蓋;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill','1_age'=>20);
extract($a_bill_info,EXTR_PREFIX_INVALID,'bill');
echo $name. ' '.$bill_1_age;

#output : bill 20;

語法結(jié)構(gòu)6:
int extract(array $array ,EXTR_IF_EXISTS)

導(dǎo)出已經(jīng)存在相同變量名的鍵名,同時覆蓋原有的;
沒有同名變量的鍵名,不需要處理;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill','1_age'=>20);

extract($a_bill_info,EXTR_IF_EXISTS);
echo $name ;
#output : bill;

語法結(jié)構(gòu)7:
int extract(array $array ,EXTR_PREFIX_IF_EXISTS ,string $prefix);

只導(dǎo)出已經(jīng)存在相同變量名的鍵名,同時在鍵名前增加前綴,變成新的變量;
如果還是有重復(fù)的,那么覆蓋原有的;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill','1_age'=>20);
extract($a_bill_info,EXTR_PREFIX_IF_EXISTS,'bill');

echo $bill_name.' '.$name;
#output : bill old_name;


語法結(jié)構(gòu)8:
int extract(array $array ,EXTR_REFS);

導(dǎo)出的變量是鍵值的引用,會隨鍵值的變化而變化;
覆蓋同名的變量;

實(shí)例:

$name = 'old_name';
$a_bill_info = array('name'=>'bill','1_age'=>20);
extract($a_bill_info,EXTR_REFS,'bill');
echo $name;
#output : bill;
$a_bill_info['name'] = tom;
echo $name;
#output : tom;



array_map()

遍歷一個或多個數(shù)組,把數(shù)組的鍵值傳遞給回調(diào)函數(shù)計(jì)算;
返回一個由函數(shù)返回值構(gòu)成的數(shù)組;
當(dāng)遍歷一個數(shù)組的時候,返回?cái)?shù)組的鍵名是原數(shù)組;當(dāng)同時遍歷多個數(shù)組的時候,返回?cái)?shù)組的鍵名是從0開始的索引值;

基礎(chǔ)語法:

array array_map(callback $callback ,array $array_1 [array $array_2......]);

callback $callback 回調(diào)函數(shù),函數(shù)的第一個參數(shù)接受第一個數(shù)組傳遞過來的鍵值,函數(shù)的第二個參數(shù)接受第二個數(shù)組傳遞過來的鍵值。依次往后;
-如果傳遞的回調(diào)函數(shù)是NULL 的話,那么會把數(shù)組傳遞給函數(shù)的值直接返回,如果是多個數(shù)組傳遞給函數(shù)的話,那么會把多個參數(shù)組合成一個子數(shù)組返回;
-不可以傳遞引用參數(shù);不能夠修改原數(shù)組的鍵值;
-如果同時遍歷的多個數(shù)組長度不同,那么用空值補(bǔ)充長度不夠的數(shù)組;
array $array_1 需要被遍歷的數(shù)組;


語法結(jié)構(gòu)1:
array array_map(callback $callback ,array $array);

遍歷數(shù)組的鍵值,傳遞給回調(diào)函數(shù);
返回有回調(diào)函數(shù)的返回值構(gòu)成的關(guān)聯(lián)數(shù)組;
關(guān)聯(lián)數(shù)組的鍵名 == 原數(shù)組鍵名;

實(shí)例:

$a_bill_info    =   array('first_name'=>'bill','last_name'=>'bill_ln','age'=>22,'job'=>'worker');
function add_prefix($v){
  return 'prefix_'.$v;
}
print_r(array_map('add_prefix',$a_bill_info));

#output  : Array ( [first_name] => prefix_bill [last_name] => prefix_bill_ln [age] => prefix_22 [job] => prefix_worker )

語法結(jié)構(gòu)2:

array_map(callback $callback , array $array_1, array $array_2);

同時遍歷多個數(shù)組元素;
返回一個索引數(shù)組;

實(shí)例:

$a_bill_info    =   array('first_name'=>'bill','last_name'=>'bill_ln','age'=>22,'job'=>'worker');
$a_tom_info =   array('first_name'=>'tom','last_name'=>'tom_ln','age'=>32,'job'=>'worker');

function connect($a,$b){
   return $a.$b;
}

print_r(array_map('connect',$a_bill_info,$a_tom_info));

#output : Array ( [0] => billtom [1] => bill_lntom_ln [2] => 2232 [3] => workerworker );

語法結(jié)構(gòu)3:

array_map(NULL,array $array_1 ,array $array_2)

如果回調(diào)函數(shù)是 NULL 返回一個多維數(shù)組;

實(shí)例:

$a_bill_info    =   array('first_name'=>'bill','last_name'=>'bill_ln','age'=>22,'job'=>'worker');
$a_tom_info =   array('first_name'=>'tom','last_name'=>'tom_ln','age'=>32,'job'=>'worker');
$a_jack_info    =   array('first_name'=>'jack','last_name'=>'jack_ln','age'=>27);

print_r(array_map(NULL ,$a_bill_info,$a_tom_info,$a_jack_info));

#output :
#Array (
#   [0] => Array ( [0] => bill [1] => tom [2] => jack )
#   [1] => Array ( [0] => bill_ln [1] => tom_ln [2] => jack_ln )
#   [2] => Array ( [0] => 22 [1] => 32 [2] => 27 )
#   [3] => Array ( [0] => worker [1] => worker [2] => )
# )

#備注:

#注意返回的多維數(shù)組中最后一位是空值;


array_walk()

遍歷數(shù)組,修改原數(shù)組的鍵值;所以常常傳遞 鍵值引用 給自定義函數(shù);
遍歷一個數(shù)組,把數(shù)組的鍵值,鍵名依次傳遞給自定義回調(diào)函數(shù);
如果函數(shù)有第三個參數(shù),那么這個參數(shù)作為自定義函數(shù)的第三個參數(shù),傳遞給自定義函數(shù);
成功返回 true 失敗 返回 false;

基礎(chǔ)語法:

boolean array_walk(array $array , callback $callback [,mixed $usedate = NLL]);

boolean 返回值;
array $array 需要被遍歷的數(shù)組;
callback $callback 自定義回調(diào)函數(shù);

-自定義回調(diào)函數(shù)的第一參數(shù)是鍵值,第二個參數(shù)是鍵名,第三個參數(shù)是 $usedate 默認(rèn)是NULL;由于這個函數(shù)的返回值是boolean 因此主要用來改變原數(shù)組的鍵值使用的,所以第一個參數(shù)常常是傳遞 鍵值引用;

mixed $usedate 傳遞給自定義函數(shù)的第三個參數(shù);

備注:

array_walk() 和 foreach() 都是遍歷數(shù)組,
而且都不能夠返回一個具有實(shí)際操作意義的值,所以常常都使用鍵值的引用,都主要用于原數(shù)組的修改;
array_walk() 還有能夠檢查成功與否的 boolean 返回,而foreach() 什么都沒有;
foreach() 不僅能夠遍歷數(shù)組,還能夠遍歷對象;

語法結(jié)構(gòu)1:

boolean array_walk(array $array ,callback $callback);

實(shí)例:

$a_salary = ['bill'=>2000,'tom'=>1800,'jack'=>2750];
function increase(&$v){
  $v *=1.08;
}
array_walk($a_salary,'increase');
print_r($a_salary);
#output : Array ( [bill] => 2160 [tom] => 1944 [jack] => 2970 );

語法結(jié)構(gòu)2:
boolean array_walk(array $array ,callback $callback ,mixed $usedate);

實(shí)例:

$a_salary = ['bill'=>2000,'tom'=>1800,'jack'=>2750];
$float_ratio = 1.08;

function increase(&$v,$k,$ratio){
  $v *= $ratio;
}

array_walk($a_salary,'increase',$float_ratio);

print_r($a_salary);

$output: Array ( [bill] => 2160 [tom] => 1944 [jack] => 2970 );
#備注:
#函數(shù) increase 必須是三個形參;不能缺少 $k,即使我們不需要;

array_walk_recursive()

遞歸遍歷數(shù)組,把數(shù)組的鍵值傳遞給自定義函數(shù),
除了遞歸遍歷外,其他方面同 array_walk 相同;

基礎(chǔ)語法:

boolean array_walk_recursive(array $array , callback $callback [,mixed $usedate = NULL]);

boolean 返回值,成功返回 true 失敗返回 false;
array $array 需要被遍歷的函數(shù);
callback $callback 自定義回調(diào)函數(shù),
-自定義函數(shù)的第一個參數(shù)是數(shù)組的鍵值,因?yàn)閍rray_walk_recursive 沒有實(shí)際意義的返回值,所以一般傳遞鍵值的引用,改變原數(shù)組;
-自定義函數(shù)的第二個參數(shù)是,鍵名;
-自定義函數(shù)的額第三個參數(shù)是 ,mixed $usedate 的值;
mixed $usedate 傳遞給自定義函數(shù)的第三個值;

語法結(jié)構(gòu)1:
boolean array_walk_recursive(array $array , callback $callback);

function callback(&$v,$k){
$v,$k;
}

不帶多余參數(shù)的遍歷數(shù)組;

實(shí)例:


$a_personal_info = array(
                            'bill' => array(
                                            'first_name'    => 'bill_fn',
                                            'last_name'     => 'bill_ln',
                                            'age'          => 55,
                                            'other'     => array('a','b','c')
                                          ),
                            'tom'  => array(
                                            'first_name'    => 'tom_fn',
                                            'last_name'  => 'tom_ln',
                                            'age'          =>   30,
                                            'other'      => array('a','b','c')
                                          ),
                            'jack' => array(
                                            'first_name'    => 'jack_fn',
                                            'last_name'  => 'jack_ln',
                                            'age'          => 20,
                                            'other'      => array('a','b','c')
                                          )

                            );

function change_age(&$v,$k){
  if($k == 'age'){
    $v += 10;
  }
}

if(array_walk_recursive ($a_personal_info, 'change_age')){
  print_r($a_personal_info);
}

#output :
#Array (
#[bill] => Array ( [first_name] => bill_fn [last_name] => bill_ln [age] => 65 [other] => Array ( [0] => 10 [1] => b [2] => c ) )
#[tom] => Array ( [first_name] => tom_fn [last_name] => tom_ln [age] => 40 [other] => Array ( [0] => 10 [1] => b [2] => c ) )
#[jack] => Array ( [last_name] => jack_ln [age] => 30 [other] => Array ( [0] => 10 [1] => b [2] => c ) ) )


語法結(jié)構(gòu)2:
boolean array_walk_recursive(array $array , callback $callback , mixed $usedate);

function callback(&$v,$k,$date){
$v,$k,$date;
}

帶額外參數(shù)的遍歷數(shù)組;

實(shí)例:


$a_personal_info = array(
                            'bill' => array(
                                            'first_name'    => 'bill_fn',
                                            'last_name'     => 'bill_ln',
                                            'age'          => 55,
                                            'other'     => array('a','b','c')
                                          ),
                            'tom'  => array(
                                            'first_name'    => 'tom_fn',
                                            'last_name'  => 'tom_ln',
                                            'age'          =>   30,
                                            'other'      => array('a','b','c')
                                          ),
                            'jack' => array(
                                            'first_name'    => 'jack_fn',
                                            'last_name'  => 'jack_ln',
                                            'age'          => 20,
                                            'other'      => array('a','b','c')
                                          )

                            );

function change_age(&$v,$k,$date){
  if($k == 'age'){
    $v += $date;
  }
}

if(array_walk_recursive($a_personal_info,'change_age',1)){
  print_r($a_personal_info);
}

#output:
#Array (
#[bill] => Array ( [first_name] => bill_fn [last_name] => bill_ln [age] => 56 [other] => Array ( [0] => 10 [1] => b [2] => c ) )
#[tom] => Array ( [first_name] => tom_fn [last_name] => tom_ln [age] => 31[other] => Array ( [0] => 10 [1] => b [2] => c ) )
#[jack] => Array ( [last_name] => jack_ln [age] => 21 [other] => Array ( [0] => 10 [1] => b [2] => c ) ) )


array_filter()

用自定義函數(shù)過濾數(shù)組;
返回一個有自定義函數(shù)返回true 的數(shù)組元素構(gòu)成的數(shù)組;
不會改變原有數(shù)組元素;

基礎(chǔ)語法:
array array_filter(array $array ,callback $callback [constant $flags = NULL]);

array 返回的數(shù)組;
array $array 被過濾的原始數(shù)組;
callback $callback 自定義函數(shù);
constant $flags 決定傳遞給自定義函數(shù)的參數(shù);
ARRAY_FILTER_USE_KEY 傳遞鍵名;
ARRAY_FILTER_USE_BOTH 傳遞鍵值和鍵名,第一個參數(shù)是鍵值,第二個參數(shù)是鍵名;
忽略沒有這個參數(shù),傳遞鍵值;

語法結(jié)構(gòu)1:

array array_filter(array $array ,callback $callback);
function callback ($v){
$v;
}

實(shí)例:

$a_int = range(1,10);
function get_even($v){
  if($v%2 == 0){
    return true;
  }
}

print_r(array_filter($a_int,'get_even'));
#output : Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 [9] => 10 );

語法結(jié)構(gòu)2:
array array_filter(array $array ,callback $callback ,ARRAY_FILTER_USE_KEY);
function callback($k){
$k;
}

實(shí)例:

$a_personal_info = array(
                            '王軍' => array(
                                            'first_name'    => '軍',
                                            'last_name'     => '王',
                                            'age'          => 55,
                                          ),
                            '王丹'  => array(
                                            'first_name'    => '丹',
                                            'last_name'  => '王',
                                            'age'          =>   30,
                                          ),
                            '李明' => array(
                                            'first_name'    => '明',
                                            'last_name'  => '李',
                                            'age'          => 20,
                                          )

                            );

function get_people_wangs($k){
  if(mb_substr($k,0,1,'utf-8') == '王'){
    return true;
  }
}

print_r(array_filter($a_personal_info,'get_people_wangs',ARRAY_FILTER_USE_KEY));

#output:
#Array ( 
#[王軍] => Array ( [first_name] => 軍 [last_name] => 王 [age] => 55 ) 
#[王丹] => Array ( [first_name] => 丹 [last_name] => 王 [age] => 30 )
# )

語法結(jié)構(gòu)3:

array array_filter(array $array ,callback $callback ,ARRAY_FILTER_USE_BOTH);

實(shí)例:

$a_personal_info = array(
                            '王軍' => array(
                                            'first_name'    => '軍',
                                            'last_name'     => '王',
                                            'age'          => 55,
                                          ),
                            '王軍'  => array(
                                            'first_name'    => '軍',
                                            'last_name'  => '王',
                                            'age'          =>   30,
                                          ),
                            '李明' => array(
                                            'first_name'    => '明',
                                            'last_name'  => '李',
                                            'age'          => 20,
                                          )

                            );
function get_people($v,$k){
  if(mb_substr($k,0,1,'UTF-8') == '王' && $v['age'] == 30){
    return true;
  }
}

print_r(array_filter($a_personal_info,'get_people',ARRAY_FILTER_USE_BOTH));
#output : Array ( [王軍] => Array ( [first_name] => 軍 [last_name] => 王 [age] => 30 ) );


array_rand()

隨機(jī)返回鍵名;

基礎(chǔ)語法:
mixed array_rand(array $array [int $number = 1]);

mixed 返回一個鍵名字符串或 多個鍵名組成的數(shù)組;

array $array 被操作的數(shù)組;
int $number 指定返回的鍵名的個數(shù);

備注:
如果 int $number >= 數(shù)組的長度,那么返回整個鍵名構(gòu)成的索引數(shù)組,而且排列的順序同原數(shù)組;
php 獲取數(shù)組鍵名的函數(shù)

語法結(jié)構(gòu)1:
string array_rand(array $array)

隨機(jī)返回?cái)?shù)組鍵名字符串;

實(shí)例:

$a_bill_info    =   array('first_name'=>'bill','last_name'=>'bill_ln','age'=>22,'job'=>'worker');

echo array_rand($a_bill_info);
#output : 數(shù)組中任意一個隨機(jī)鍵名;

語法結(jié)構(gòu)2:
array array_rand(array $array , int $number);

返回一個由隨機(jī)鍵名組成的數(shù)組;
如果 int $number >= 數(shù)組的長度,返回整個數(shù)組的鍵名,同時順序同原數(shù)組;

實(shí)例:

$a_bill_info    =   array('first_name'=>'bill','last_name'=>'bill_ln','age'=>22,'job'=>'worker');

print_r(array_rand($a_bill_info,2));
print_r(array_rand($a_bill_info,count($a_bill_info)));

#output:
#Array ( [0] => first_name [1] => job )
#Array ( [0] => first_name [1] => last_name [2] => age [3] => job )


array_reduce()

遍歷數(shù)組,迭代的把數(shù)組簡化成一個值返回;

基礎(chǔ)語法:
mixed array_reduce(array $array ,callback $callback [, mixed $initial = NULL]);

mixed 返回值;
array $array 被用來計(jì)算的數(shù)組;

callback $callback 自定義函數(shù);
-mixed callback(mixed $carry ,mixed $item)
-carry 上次迭代的結(jié)果,如果是第一次迭代 則是 initial ;
-item 這次迭代的值;

mixed $initial 傳遞給第一次迭代的自定義函數(shù)的第一個參數(shù),或當(dāng)?shù)臄?shù)組為空的時候,作為返回值;
-注意初始值默認(rèn)是 NULL;

語法結(jié)構(gòu)1:
mixed array_reduce(array $array ,callback $callback );

初始值是NULL 的迭代;

實(shí)例:

$a_int = range(1,10);

function sum($carry,$item){
  return $carry += $item;
}
echo (array_reduce($a_int,'sum'));

#output : 55;

語法結(jié)構(gòu)2:
mixed array_reduce(array $array ,callback $callback, mixed $initial);

有額外參數(shù)的迭代計(jì)算;

實(shí)例:

$a_int = range(1,10);
$a_empty = array();

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

print_r(array_reduce($a_int,'product',1));
print_r(array_reduce($a_int,'product',1));

#output :
# 3628800;
# 1;

備注:

array_reduce() 的第三個參數(shù)默認(rèn)是NULL 在數(shù)字計(jì)算的時候會轉(zhuǎn)化成0;


array_product()

計(jì)算數(shù)組中所有鍵值的乘積;返回這個乘積;
專門用于數(shù)字運(yùn)算;
被操作數(shù)組為空的時候,返回1;

基礎(chǔ)語法:
number array_product(array $array);

number 返回 整數(shù) or 浮點(diǎn)數(shù);
array $array 被遍歷的數(shù)組;

實(shí)例:

echo array_product(range(1,10));

#output: 3628800

備注:

被操作數(shù)組為空的時候,返回1;
array_sum() 被操作數(shù)組為空的時候,返回0;


array_sum()

返回?cái)?shù)組中所有鍵值的總和;
主要用作數(shù)字;
被操作數(shù)組為空的時候,返回0;

基礎(chǔ)語法:

number array_sum(array $array);

number 返回整數(shù) or 浮點(diǎn)數(shù);
array $array 被操作的數(shù)組;

實(shí)例:

echo array_sum(range(1,10));

#output: 55;

備注:

被操作數(shù)組為空的時候返回0;
array_product() 數(shù)組為空的時候返回1;


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)組的概述 PHP 中的數(shù)組實(shí)際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方...
    dptms閱讀 1,747評論 0 4
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解...
    上街買菜丶迷倒老太閱讀 1,504評論 0 20
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解包。 uni...
    思夢PHP閱讀 2,135評論 1 24
  • array() | [ ] | array_fill() | array_fill_keys() | co...
    彭曉華閱讀 467評論 0 0
  • 我站在十八層的陽臺上 憑欄四顧各方 所見都是鋼筋水泥的樓房 滿布著蜂窩似的密窗 那句智慧的哲語 在城市失去了哲理的...
    葉知秋yzq閱讀 182評論 0 2

友情鏈接更多精彩內(nèi)容