php數組的數學功能相關常用函數

来源:https://www.cnblogs.com/zxcv123/archive/2019/11/06/11809074.html
-Advertisement-
Play Games

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提示,也不會統計二維數組中一維數組的值。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇文章給大家帶來的內容是關於php為什麼需要非同步編程?php非同步編程的詳解(附示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。 我對 php 非同步的知識還比較混亂,寫這篇是為了整理,可能有錯。 傳統的 php-fpm 一個進程執行一個請求,要達到多少併發,就要生成多少個進程。 ...
  • 最近兩個月一直在研究 Swoole,那麼藉助這篇文章,我希望能夠把 Swoole 安利給更多人。雖然 Swoole 可能目前定位是一些高級 phper 的玩具,讓中低級望而生畏,可能對一些應用場景也一臉懵逼,但其實沒這麼難的。 在 Swoole 官網的自我介紹是“面向生產環境的 PHP 非同步網路通信 ...
  • 這篇文章僅僅只實現一個 Redis 連接池,篇幅就太少了,順便將前幾篇整合一下。Demo 中大概包含這些點: 實現 MySQL 連接池 實現 MySQL CURD 方法的定義 實現 Redis 連接池 實現 Redis 方法的定義 滿足 HTTP、TCP、WebSocket 調用 提供 Demo 供 ...
  • 下載ProcessExplorer ProcessExplorer下載地址:ProcessExplorer 下載運行代碼 打開ProcessExplorer 查看javaw.exe的pid jstack pid號 > G:\1.log(保存路徑) 查看tid javaw.exe右鍵屬性-》點Thre ...
  • 這篇文章給大家分享的內容是關於Swoft 源碼剖析之Swoole和Swoft的一些介紹(Task投遞/定時任務篇),有一定的參考價值,有需要的朋友可以參考一下。 前言 Swoft的任務功能基於Swoole的Task機制,或者說Swoft的Task機制本質就是對Swoole的Task機制的封裝和加強。 ...
  • 最近,決定在一個項目用tp5進行APP介面開發,用Python做數據分析,然後這就面臨一個問題:PHP和Python如何進行數據交互? 思路 我解決此問題的方法是利用了PHP的passthru函數來調用命令運行Python腳本。 實現 在PHP中調用命令運行Python腳本 1 2 3 4 5 6 ...
  • 在實際開發中,有時候為了及時處理請求和進行響應,我們可能會多任務同時執行,或者先處理主任務,也就是非同步調用,非同步調用的實現有很多,例如多線程、定時任務、消息隊列等, 這一章節,我們就來講講@Async非同步方法調用。 一、@Async使用演示 @Async是Spring內置註解,用來處理非同步任務,在S ...
  • 如何提高效率問題,往往同樣的功能,不一樣的代碼,出來的效率往往大不一樣。 ● 用單引號代替雙引號來包含字元串,這樣做會更快一些。因為PHP會在雙引號包圍的字元串中搜尋變數,單引號則不會,註意:只有echo能這麼做,它 是一種可以把多個字元串當作參數的“函數”(譯註:PHP手冊中說echo是語言結構, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...