當前位置: 首頁> 最新文章列表> 結合json_decode() 與array_diff_key() 處理JSON 數據

結合json_decode() 與array_diff_key() 處理JSON 數據

M66 2025-05-15

在PHP 中,處理JSON 數據是常見的任務,特別是當我們需要從API 獲取或傳輸數據時。常見的需求之一是篩選出JSON 中的指定鍵值對,通常這可以通過將JSON 轉換為PHP 數組,再使用相應的函數進行處理。本文將介紹如何結合json_decode()array_diff_key()函數來有效地篩選出JSON 數據中的特定鍵值對。

1. 使用json_decode()函數解析JSON 數據

首先, json_decode()函數用於將JSON 格式的字符串轉換為PHP 數組。這個函數的基本用法如下:

 $json_data = '{"name": "John", "age": 30, "city": "New York"}';
$data = json_decode($json_data, true);  // 第二個參數 true 讓返回結果為數組

在上面的代碼中, $json_data是一個JSON 字符串, json_decode()將其轉換為PHP 數組$data 。轉換後的數組形式為:

 Array
(
    [name] => John
    [age] => 30
    [city] => New York
)

2. 使用array_diff_key()函數篩選指定鍵值對

一旦JSON 數據轉換為數組,我們可以使用array_diff_key()函數來篩選掉不需要的鍵值對。該函數可以比較兩個數組的鍵,並返回第一個數組中不在第二個數組中的鍵值對。

假設我們想從上述數組中移除agecity鍵,只保留name鍵。我們可以這樣做:

 $keys_to_keep = ['name' => null];  // 要保留的鍵
$filtered_data = array_diff_key($data, $keys_to_keep);

不過, array_diff_key()函數返回的是一個移除鍵值對後的數組,因此這裡的代碼可能讓人困惑。為避免誤解,我們可以通過將要刪除的鍵反向操作來保留特定的鍵:

 $keys_to_remove = ['age' => null, 'city' => null];  // 要移除的鍵
$filtered_data = array_diff_key($data, $keys_to_remove);

這樣, $filtered_data將只包含name鍵對應的值:

 Array
(
    [name] => John
)

3. 實際應用示例:從API 獲取數據並篩選

假設我們從API 獲取了一些JSON 數據,並希望從中篩選出我們關心的部分。以下是一個更具體的例子:

 // 假設我們從某個 URL 獲取到的 JSON 數據
$json_url = "https://m66.net/api/user_data";  // 替換為實際的 URL
$json_data = file_get_contents($json_url);

// 將 JSON 數據解码为 PHP 數組
$data = json_decode($json_data, true);

// 假設我們只需要 user_id 和 user_name 這兩個字段
$keys_to_keep = ['user_id' => null, 'user_name' => null];

// 使用 array_diff_key 筛选需要的數據
$filtered_data = array_diff_key($data, $keys_to_keep);

// 输出筛选后的數據
print_r($filtered_data);

在這個例子中, file_get_contents()函數從指定的URL 獲取JSON 數據,並通過json_decode()轉換為PHP 數組。然後,使用array_diff_key()來篩選出需要的字段,最終打印出篩選後的數據。

4. 總結

通過結合使用json_decode()array_diff_key()函數,我們可以非常方便地從JSON 數據中篩選出指定的鍵值對。 json_decode()負責將JSON 字符串轉為PHP 數組,而array_diff_key()則幫助我們移除不需要的鍵,從而獲得我們需要的部分數據。這種方法可以廣泛應用於API 調用結果的處理,以及任何需要從JSON 數據中提取特定信息的場景。