使用PHP函数使用Array覆盖默认的JSON目标

时间:2017-12-27 01:54:32

标签: php arrays json

我们使用我们的密钥构建了一个API来直接访问其他社交网络API。

我正在尝试构建一个功能来访问该API。

默认功能已写入并正在运行。

问题

  • 如何指定一个新数组来定位json数据?
    • 这将覆盖默认设置。
function SocialAPI($handle, $service, $path="") {
    $handle = strtolower($handle);
    $service = strtolower($service);

    $api = file_get_contents("https://api.service.domain.com/v1/Social?handle=$handle&service=$service");

    if($api !== false) {
        $data = json_decode($api, true);

        if($data !== null) {
            if($service === "twitter") {
                return $data['0']['followers_count'];
            }
            if($service === "instagram") {
                if(!empty($path)) {
                    while($id = array_shift($path)) {
                        echo $data[$id];
                    }
                    return $data;
                } else {
                    return $data['user']['followed_by']['count'];
                }
            }
        } else {
            return false;
        }
    } else {
        return "API call failed.";
    }
}

//Test API Function - ** TO BE DELETED **
echo SocialAPI("JohnDoe", "Instagram", "['user']['full_name']");

exit();

1 个答案:

答案 0 :(得分:0)

function array_deref($data, $keys) {
    return empty($keys) ? $data
        : array_deref($data[$keys[0]], array_slice($data, 1))
}

function SocialAPI($handle, $service, $path="") {
    $handle = strtolower($handle);
    $service = strtolower($service);

    $api = file_get_contents("https://api.service.domain.com/v1/Social?handle=$handle&service=$service");
    if ($api === false) {
        return "API call failed.";
    }

    $data = json_decode($api, true);
    if($data !== null) {
        return false;
    }

    if ($service === "twitter") {
        if (empty($path)) $path = ['0','followers_count'];
        return array_deref($data, $path);
    } elseif ($service === "instagram") {
        if (empty($path)) $path = ['user','followed_by'];
        return array_deref($data, $path);
    }
}

//Test API Function - ** TO BE DELETED **
echo SocialAPI("JohnDoe", "Instagram", ['user', 'full_name']);
echo SocialAPI("JohnDoe", "Instagram");

exit();

我添加了一个实用程序函数array_deref,以递归方式遍历数组(调用自身来处理每个级别)。