php陣列中有一些函式與數學相關的函式,大多都是以array開頭然后下劃線接一個數學上的英文單詞,如下:
1 array_diff() 2 array_diff_assoc() 3 array_intersect() 4 array_intersect_assoc() 5 array_sum() 6 array_product() 7 array_count_values()
首先是陣列集合函式,差集array_diff,用于得到目標陣列和其他陣列的都不同的那些元素
1 $arr = [1, 2, 3, 4, 5, 6, 7, 8]; 2 $arr1 = [1, 2, 3, 4, 6]; 3 $arr2 = [1, 2, 3, 4, 7]; 4 print_r( array_diff( $arr, $arr1, $arr2 ) );
// Array // ( // [4] => 5 // [7] => 8 // )
對于關聯陣列,和上面的結果一致,因為array_diff函式只比教值是否相同
1 $arr = [ 2 'A' => 1, 'B' => 2, 3 'c1' => 3, 'd1' => 4, 'e1' => 5, 4 'f' => 6, 'g' => 7, 'h' => 8 5 ]; 6 $arr1 = [ 7 'a' => 1, 'b' => 2, 8 'c' => 3, 'd' => 4, 'e' => 6 9 ]; 10 $arr2 = [ 11 'a' => 1, 'b' => 2, 12 'c' => 3, 'd' => 4, 'e' => 7 13 ]; 14 print_r( array_diff( $arr, $arr1, $arr2 ) ); 15 // Array 16 // ( 17 // [e1] => 5 18 // [h] => 8 19 // )
array_diff_assoc函式從名字上來看,就知道需要比較每個元素的鍵,區分大小寫,
1 $arr = [ 2 'A' => 1, 'B' => 2, 3 'c1' => 3, 'd1' => 4, 'e1' => 5, 4 'f' => 6, 'g' => 7, 'h' => 8 5 ]; 6 $arr1 = [ 7 'a' => 1, 'b' => 2, 8 'c' => 3, 'd' => 4, 'e' => 6 9 ]; 10 $arr2 = [ 11 'a' => 1, 'b' => 2, 12 'c' => 3, 'd' => 4, 'e' => 7 13 ]; 14 print_r( array_diff_assoc( $arr, $arr1, $arr2 ) ); 15 // Array 16 // ( 17 // [A] => 1 18 // [B] => 2 19 // [c1] => 3 20 // [d1] => 4 21 // [e1] => 5 22 // [f] => 6 23 // [g] => 7 24 // [h] => 8 25 // )
array_intersect()函式,獲得目標函式與其他函式都相同的函式,只比教值
1 $arr = [ 2 'A' => 1, 'B' => 2, 3 'c1' => 3, 'd1' => 4, 'e1' => 5, 4 'f' => 6, 'g' => 7, 'h' => 8 5 ]; 6 $arr1 = [ 7 'a' => 1, 'b' => 2, 8 'c' => 3, 'd' => 4, 'e' => 6 9 ]; 10 $arr2 = [ 11 'a' => 1, 'b' => 2, 12 'c' => 3, 'd' => 4, 'e' => 7 13 ]; 14 print_r( array_intersect( $arr, $arr1, $arr2 ) ); 15 // Array 16 // ( 17 // [A] => 1 18 // [B] => 2 19 // [c1] => 3 20 // [d1] => 4 21 // )
array_intersect_assoc()只有鍵和值都一樣才行,
1 $arr = [ 2 'a' => 1, 'b' => 2, 3 'c1' => 3, 'd1' => 4, 'e1' => 5, 4 'f' => 6, 'e' => 7, 'h' => 8 5 ]; 6 $arr1 = [ 7 'a' => 1, 'b' => 2, 8 'c' => 3, 'd' => 4, 'e' => 6 9 ]; 10 $arr2 = [ 11 'a' => 1, 'b' => 2, 12 'c' => 3, 'd' => 4, 'e' => 7 13 ]; 14 print_r( array_intersect_assoc( $arr, $arr1, $arr2 ) ); 15 // Array 16 // ( 17 // [a] => 1 18 // [b] => 2 19 // )
array_sum()函式計算陣列中所有元素值的和,array_product()函式計算陣列中所有元素的積,
對于元素值為數字,很符合數學,但如果是字符和數字混雜,
1 $arr = [1, 2, 3, 4, 5, 'a', 'asss']; 2 $arr1 = [ '1', '2', '2as', '2a2' ]; 3 echo array_sum($arr), PHP_EOL, array_sum($arr1);
15 7
這就采用了自動型別轉換(字串轉數字)的規則了,對于array_product()這個函式,數學規則的不同,導致結果也是不同,
1 $arr = [1, 2, 3, 4, 5, 'a', 'asss']; 2 $arr1 = [ '1', '2', '2as', '2a2' ]; 3 echo array_product($arr), PHP_EOL, array_product($arr1); 4 // 0 5 // 8
array_count_values()函式,統計每一個值的個數
1 $arr = [1, 2, 3, '1', '2', 1, 2]; 2 print_r( array_count_values($arr) ); 3 // Array 4 // ( 5 // [1] => 3 6 // [2] => 3 7 // [3] => 1 8 // )
從結果來看似乎也涉及到了自動型別轉換規則,注意:向這個函式中傳入二維以上陣列,會有warning提示,也不會統計二維陣列中一維陣列的值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121041.html
標籤:PHP
下一篇:提高PHP性能效率的幾個技巧!
