PHP   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 使用DOT Notations键数组从多维数组中获取选定列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下数组
$users = Array
(
    [0] => Array
        (
            [id] => 16
            [name] => Dr. Arti Luthra
            [email] => artiluthra@dsingh.com
            [@R_874_11064@er] => female
            [mobile] => 123456789
            [status] => 0
            [addresses] => Array
                (
                    [0] => Array
                        (
                            [id] => 16
                            [clinic_name] => Luthra MeDical Center
                            [address] => A-65/2,Meera Bhagh
                            [contact_no] => 2342345234
                            [formatted_address] => A-65/2,Meera Bhagh Rohini,West Delhi,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                            [end] => 02:00 PM
                                        )

                                    [1] => Array
                                        (
                                            [start] => 05:00 PM
                                            [end] => 08:00 PM
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 17
                            [clinic_name] => Luthra MeDical Center
                            [address] => A-65/2,Chanakyapuri
                            [contact_no] => 123456789
                            [formatted_address] => A-65/2,Chanakyapuri Chanakyapuri,South Delhi,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                            [end] => 02:00 PM
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 39
            [name] => Sudhir Seth
            [email] => sudhirseth@gmail.com
            [@R_874_11064@er] => male
            [mobile] => 65565656565
            [status] => 0
            [addresses] => Array
                (
                    [0] => Array
                        (
                            [id] => 54
                            [clinic_name] => Dr. Sudhir Seth's Orthopoint
                            [address] => D-595,Chittranjan Park,Landmark: Besides Deshbandhu College,Delhi
                            [contact_no] => 
                            [formatted_address] => D-595,Delhi Greater Kailash,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 10:30 AM
                                            [end] => 01:00 PM
                                        )

                                    [1] => Array
                                        (
                                            [start] => 06:00 PM
                                            [end] => 09:00 PM
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 55
                            [clinic_name] => Fortis C-Doc
                            [address] => B-16,Chirag Enclave,Nehru Place. Landmark: Opp. to Nehru Place,Delhi
                            [contact_no] => 
                            [formatted_address] => B-16,Delhi Lajpat Nagar,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                            [end] => 11:00 AM
                                        )

                                )

                        )

                )

        )

)

我想使用点符号来获取所选键

getKeys($用户,阵列( ‘名称’,‘电子邮件’,‘addresses.address’,‘addresses.clinic_name’,‘addresses.timings.start’))

使用上面的getKeys()方法,输出应该是:

Array
(
    [0] => Array
        (
            [name] => Dr. Arti Luthra
            [email] => artiluthra@dsingh.com
            [addresses] => Array
                (
                    [0] => Array
                        (
                            [clinic_name] => Luthra MeDical Center
                            [address] => A-65/2,Meera Bhagh
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                        )

                                    [1] => Array
                                        (
                                            [start] => 05:00 PM
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [clinic_name] => Luthra MeDical Center
                            [address] => A-65/2,Chanakyapuri
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [name] => Sudhir Seth
            [email] => sudhirseth@gmail.com
            [addresses] => Array
                (
                    [0] => Array
                        (
                            [clinic_name] => Dr. Sudhir Seth's Orthopoint
                            [address] => D-595,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 10:30 AM
                                        )

                                    [1] => Array
                                        (
                                            [start] => 06:00 PM
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [clinic_name] => Fortis C-Doc
                            [address] => B-16,Delhi
                            [timings] => Array
                                (
                                    [0] => Array
                                        (
                                            [start] => 09:00 AM
                                        )

                                )

                        )

                )

        )

)

解决方法

似乎这个问题非常接近xPath for xml结构.

还有什么有趣的json为json例如:

php中的JsonPath – https://github.com/Skyscanner/JsonPath-PHP

@H_261_4@myqsl中的JsonPath – https://dev.mysql.com/doc/refman/5.7/en/json-path-syntax.html

但是,不幸的是,对于php阵列,这项技术还没有实现.

编写自己的库(phpPath)是个好点!

特别针对你的一个不同的案例:

/**
 * Search values by phpPath
 *
 * @param array $aData
 * @param String|array $phpPath
 * @param array &$aReturn
 * @return array
 */
function getKeys($aData,$phpPath = [],&$aReturn = []) {

    //Support arrays of $phpPath
    if (is_array($phpPath)) {
        foreach ($phpPath as $path) {
            getKeys($aData,$path,$aReturn);
        }
        return $aReturn;
    }

    //Get next sought-for key
    $aParts = explode('.',$phpPath);
    $sNeedle = array_shift($aParts);
    $sRemain = implode('.',$aParts);

    foreach ($aData as $k => $v) {
        //skip numeric keys
        //@todo need to thinking about
        //needs to add * (wildcard) into phpPath for that purpose
        if (is_numeric($k) && $phpPath) {
            getKeys($v,$phpPath,$aReturn[$k]);
            conTinue;
        }

        //Is it key that we want
        if ($k !== $sNeedlE) {
            conTinue;
        }

        //checking needs deeper search
        if (is_array($v) && $sRemain) {
            getKeys($v,$sRemain,$aReturn[$k]);
            conTinue;
        }

        //Need to save fully-qualified found value
        $aReturn[$k] = $v;
        break;
    }

    return $aReturn;
}

使用示例:

var_dump(
    getKeys($users,array(
        'name','email','addresses.address','addresses.clinic_name','addresses.timings.start'
    ))
);

大佬总结

以上是大佬教程为你收集整理的php – 使用DOT Notations键数组从多维数组中获取选定列全部内容,希望文章能够帮你解决php – 使用DOT Notations键数组从多维数组中获取选定列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。