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 ;
}
傳遞 鍵值 操作瘪阁;不會修改原鍵值撒遣;

實例:

$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ù)組管跺;

實例:

$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ù)組义黎,
實例:

$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;
}
操作鍵名和鍵值;
實例:

$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;
}

實例:

$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 賦值的順序從左到右卸夕;

實例:

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ù)組中指定部分层释,跳過不需要的部分;

實例:

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;

實例:

$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ù)組捕獲鍵值快集;

實例:


$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.reibang.com/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)出所有鍵名為變量名纠俭,同時覆蓋原有的變量;

實例:

$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)出所有的鍵名為變量名浪慌,同已有變量名相沖突的是否冤荆,保留原有的變量;

實例:

$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)出所有的鍵名為變量名钓简,如果同已有變量相沖突,在沖突的鍵名前增加前綴汹想,為新的變量外邓;

實例:

$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)出所有的鍵名為變量名,同時在所有的鍵名前增加前綴欧宜;
如果還有同名的變量名坐榆,那么覆蓋原有的拴魄;

實例:

$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)出所有的鍵名為變量名冗茸,同時在非法的變量名前增加前綴;
如果有相同的變量名匹中,那么覆蓋夏漱;

實例:

$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)存在相同變量名的鍵名,同時覆蓋原有的顶捷;
沒有同名變量的鍵名挂绰,不需要處理;

實例:

$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ù)的,那么覆蓋原有的践付;

實例:

$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)出的變量是鍵值的引用秦士,會隨鍵值的變化而變化;
覆蓋同名的變量永高;

實例:

$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ù)計算;
返回一個由函數(shù)返回值構(gòu)成的數(shù)組命爬;
當(dāng)遍歷一個數(shù)組的時候曹傀,返回數(shù)組的鍵名是原數(shù)組;當(dāng)同時遍歷多個數(shù)組的時候饲宛,返回數(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ù)組長度不同绿鸣,那么用空值補充長度不夠的數(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ù)組鍵名擎厢;

實例:

$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ù)組;

實例:

$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ù)組动遭;

實例:

$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 默認是NULL蛇数;由于這個函數(shù)的返回值是boolean 因此主要用來改變原數(shù)組的鍵值使用的挪钓,所以第一個參數(shù)常常是傳遞 鍵值引用;

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

備注:

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

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

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

實例:

$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);

實例:

$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ù)組的鍵值,因為array_walk_recursive 沒有實際意義的返回值惫霸,所以一般傳遞鍵值的引用猫缭,改變原數(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ù)組;

實例:


$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ù)組老赤;

實例:


$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;
}

實例:

$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;
}

實例:

$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);

實例:

$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()

隨機返回鍵名;

基礎(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)

隨機返回數(shù)組鍵名字符串帐姻;

實例:

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

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

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

返回一個由隨機鍵名組成的數(shù)組;
如果 int $number >= 數(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 被用來計算的數(shù)組刺洒;

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

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

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

初始值是NULL 的迭代拇惋;

實例:

$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ù)的迭代計算周偎;

實例:

$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ù)默認是NULL 在數(shù)字計算的時候會轉(zhuǎn)化成0;


array_product()

計算數(shù)組中所有鍵值的乘積撑帖;返回這個乘積蓉坎;
專門用于數(shù)字運算;
被操作數(shù)組為空的時候胡嘿,返回1蛉艾;

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

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

實例:

echo array_product(range(1,10));

#output: 3628800

備注:

被操作數(shù)組為空的時候勿侯,返回1;
array_sum() 被操作數(shù)組為空的時候缴罗,返回0罐监;


array_sum()

返回數(shù)組中所有鍵值的總和;
主要用作數(shù)字瞒爬;
被操作數(shù)組為空的時候弓柱,返回0;

基礎(chǔ)語法:

number array_sum(array $array);

number 返回整數(shù) or 浮點數(shù)侧但;
array $array 被操作的數(shù)組矢空;

實例:

echo array_sum(range(1,10));

#output: 55;

備注:

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屁药,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柏锄,更是在濱河造成了極大的恐慌酿箭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾娃,死亡現(xiàn)場離奇詭異缭嫡,居然都是意外死亡,警方通過查閱死者的電腦和手機抬闷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門妇蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笤成,你說我怎么就攤上這事评架。” “怎么了炕泳?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵纵诞,是天一觀的道長。 經(jīng)常有香客問我培遵,道長浙芙,這世上最難降的妖魔是什么登刺? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茁裙,結(jié)果婚禮上塘砸,老公的妹妹穿的比我還像新娘节仿。我一直安慰自己晤锥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布廊宪。 她就那樣靜靜地躺著矾瘾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箭启。 梳的紋絲不亂的頭發(fā)上壕翩,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音傅寡,去河邊找鬼放妈。 笑死,一個胖子當(dāng)著我的面吹牛荐操,可吹牛的內(nèi)容都是我干的芜抒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼托启,長吁一口氣:“原來是場噩夢啊……” “哼宅倒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屯耸,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤拐迁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疗绣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體线召,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年多矮,在試婚紗的時候發(fā)現(xiàn)自己被綠了灶搜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡工窍,死狀恐怖割卖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情患雏,我是刑警寧澤鹏溯,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站淹仑,受9級特大地震影響丙挽,放射性物質(zhì)發(fā)生泄漏肺孵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一颜阐、第九天 我趴在偏房一處隱蔽的房頂上張望平窘。 院中可真熱鬧,春花似錦凳怨、人聲如沸瑰艘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紫新。三九已至,卻和暖如春李剖,著一層夾襖步出監(jiān)牢的瞬間芒率,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工篙顺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留偶芍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓德玫,卻偏偏與公主長得像匪蟀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子化焕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

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