doutan3463 2013-05-05 21:09
浏览 24
已采纳

PHP中的关联数组中是否存在类似keypath的东西?

I want to dissect an array like this:

[
    "ID",
    "UUID",
    "pushNotifications.sent",
    "campaigns.boundDate",
    "campaigns.endDate",
    "campaigns.pushMessages.sentDate",
    "pushNotifications.tapped"
]

To a format like this:

{
    "ID" : 1,
    "UUID" : 1,
    "pushNotifications" : 
        {
            "sent" : 1,
            "tapped" : 1
        },
    "campaigns" :
        {
            "boundDate" : 1,
            "endDate" : 1,
            "pushMessages" :
                {
                    "endDate" : 1
                }  
        }
}

It would be great if I could just set a value on an associative array in a keypath-like manner:

//To achieve this:
$dissected['campaigns']['pushMessages']['sentDate'] = 1;

//By something like this:
$keypath = 'campaigns.pushMessages.sentDate';
$dissected{$keypath} = 1;

How to do this in PHP?

  • 写回答

3条回答 默认 最新

  • douying4203 2013-05-05 21:36
    关注

    You can use :

    $array = [
            "ID",
            "UUID",
            "pushNotifications.sent",
            "campaigns.boundDate",
            "campaigns.endDate",
            "campaigns.pushMessages.sentDate",
            "pushNotifications.tapped"
    ];
    
    // Build Data
    $data = array();
    foreach($array as $v) {
        setValue($data, $v, 1);
    }
    
    // Get Value
    echo getValue($data, "campaigns.pushMessages.sentDate"); // output 1
    

    Function Used

    function setValue(array &$data, $path, $value) {
        $temp = &$data;
        foreach(explode(".", $path) as $key) {
            $temp = &$temp[$key];
        }
        $temp = $value;
    }
    
    function getValue($data, $path) {
        $temp = $data;
        foreach(explode(".", $path) as $ndx) {
            $temp = isset($temp[$ndx]) ? $temp[$ndx] : null;
        }
        return $temp;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大