php數組中有一些函數與數學相關的函數,大多都是以array開頭然後下劃線接一個數學上的英文單詞,如下: 1 array_diff() 2 array_diff_assoc() 3 array_intersect() 4 array_intersect_assoc() 5 array_sum() 6 ...
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提示,也不會統計二維數組中一維數組的值。