dpztth71739 2018-06-12 08:22
浏览 31
已采纳

将多维数组与PHP中的另一个数组进行比较,并从多维数组中获取值

I have an multidimensional array from an XML file which I want to compare with a normal array. I need to compare the [tag] name in the multidimensional array with the name in the other array and get value from the multidimensional array that belongs to the tag.

Array
(
    [0] => Array
        (
            [tag] => DOCUMENT
            [type] => open
            [level] => 1
        )

    [1] => Array
        (
            [tag] => SENDERID
            [type] => complete
            [level] => 2
            [value] => TEST
        )

    [2] => Array
        (
            [tag] => SENDERSHORTNAME
            [type] => complete
            [level] => 2
        )

    [3] => Array
        (
            [tag] => RECIPIENTID
            [type] => complete
            [level] => 2
            [value] => VGLEE
        )
)

Second array which I need to compare it with the multidimensional array:

$compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');

Now I want to check if the key from $compare_array is matched in the multidimensional array. If so, I want to grab the value from the multidimensional array and make a variable with the name from the compare_array and append the value to the variable.

I made a for loop:

for($i = 0; $i < $count; $i++){
    if($values[$i]['tag'] == 'SENDERID'){
        $SENDER = $values[$i]['value'];
    }
    if($values[$i]['tag'] == 'RECIPIENTID'){
        $RECIPIENTID = $values[$i]['value'];
    }
    if($values[$i]['tag'] == 'IREF'){
        $IREF = $values[$i]['value'];
    }
    if($values[$i]['tag'] == 'DOCUMENTNUMBER'){
        $DOCUMENTNUMBER = $values[$i]['value'];
    }
}
  • 写回答

3条回答 默认 最新

  • doubiao9775 2018-06-12 08:46
    关注

    For your example data, you could use array_reduce and use in_array to check if the tag is present in $compare_array

    If you must make a variable with the name from the $compare_array and append the value to the variable you might use extract with a flag that suits your expectations.

    The value is not present in all the example data so you might also check if that exists.

    $compare_array = array('DOCUMENT', 'SENDERID', 'SENDERSHORTNAME', 'RECIPIENTID');
    $result = array_reduce($arrays, function($carry, $item) use ($compare_array) {
        if(isset($item["value"]) && in_array($item["tag"], $compare_array, true)) {
            $carry[$item["tag"]] = $item["value"];
        }
        return $carry;
    });
    extract($result, EXTR_OVERWRITE);
    
    echo $SENDERID;
    echo $RECIPIENTID;
    

    Demo

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题