首页 > 解决方案 > PHP搜索多维数组的值并获取相关元素的值

问题描述

在 PHP 中,我希望通过搜索另一个值来从数组中提取一个值。我有 uri 值,我需要与 uri 对应的 playcount 值。

完成这项工作的最佳方法是什么?我现在拥有的:

$decoded = json_decode($response, true);
$trackids = 'spotify:track:'. $trackid .'';


$key = array_search($trackids, array_column($decoded, 'playcount'));
$result = $decoded[$key]['playcount'];

echo "Result: ";
echo $result;

我认为它不完整,不知道如何从那里开始,因为它不起作用..

数组:

Array
(
    [success] => 1
    [data] => Array
        (
            [uri] => spotify:album:3T4tUhGYeRNVUGevb0wThu
            [name] => ÷ (Deluxe)
            [cover] => Array
                (
                    [uri] => https://i.scdn.co/image/ab67616d00001e02ba5db46f4b838ef6027e6f96
                )

            [year] => 2017
            [track_count] => 16
            [discs] => Array
                (
                    [0] => Array
                        (
                            [number] => 1
                            [name] => 
                            [tracks] => Array
                                (
                                    [0] => Array
                                        (
                                            [uri] => spotify:track:7oolFzHipTMg2nL7shhdz2
                                            [playcount] => 181540969
                                            [name] => Eraser
                                            [popularity] => 63
                                            [number] => 1
                                            [duration] => 227426
                                            [explicit] => 
                                            [playable] => 1
                                            [artists] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [name] => Ed Sheeran
                                                            [uri] => spotify:artist:6eUKZXaKkcviH0Ku9w2n3V
                                                            [image] => Array
                                                                (
                                                                    [uri] => https://i.scdn.co/image/ab6761610000517412a2ef08d00dd7451a6dbed6
                                                                )

                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [uri] => spotify:track:6PCUP3dWmTjcTtXY02oFdT
                                            [playcount] => 966197832
                                            [name] => Castle on the Hill
                                            [popularity] => 79
                                            [number] => 2
                                            [duration] => 261153
                                            [explicit] => 
                                            [playable] => 1
                                            [artists] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [name] => Ed Sheeran
                                                            [uri] => spotify:artist:6eUKZXaKkcviH0Ku9w2n3V
                                                            [image] => Array
                                                                (
                                                                    [uri] => https://i.scdn.co/image/ab6761610000517412a2ef08d00dd7451a6dbed6
                                                                )

                                                        )

                                                )

                                        )

标签: phparraysmultidimensional-array

解决方案


$key = array_search($trackids, array_column($decoded, 'playcount'));在这一行,你犯了两个错误。首先, $decode数组中没有像 playcount 这样的列。其次,您正在使用uri关键字而不是playcount关键字进行搜索。还有一件事,discs key 和 discs key 里面的 track,都是多维数组。因此,如果您想获取确切的值,此查询将是,

$decoded = array_map(function($x) {
    return array_column($x, 'url');
}, array_column($decoded['data']['discs'], 'tracks')); 
$decoded = call_user_func_array('array_merge', $decoded);

$key = array_search($trackids, $decoded);

推荐阅读