Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于原始数组中的值将PHP多维数组转换为另一个数组?_Php_Arrays_Object_Multidimensional Array_Output - Fatal编程技术网

如何基于原始数组中的值将PHP多维数组转换为另一个数组?

如何基于原始数组中的值将PHP多维数组转换为另一个数组?,php,arrays,object,multidimensional-array,output,Php,Arrays,Object,Multidimensional Array,Output,我花了一周的时间来研究这个问题,我正试图找到一种方法来访问多维数组中的数据,并将其输出到另一个数组,根据数组中的值进行不同的重构。我没有发布一行又一行的错误代码,而是提供了我的简化示例: 以下是原始阵列: array(2) { [0] => array(2) { ["aaa"] => array(2) { ["a19a3234b881ce"] => array(2) {

我花了一周的时间来研究这个问题,我正试图找到一种方法来访问多维数组中的数据,并将其输出到另一个数组,根据数组中的值进行不同的重构。我没有发布一行又一行的错误代码,而是提供了我的简化示例:

以下是原始阵列:

array(2) {
    [0] => array(2) {
        ["aaa"] => array(2) {
            ["a19a3234b881ce"] => array(2) {
                ["pid"] => int(29301)
                ["vid"] => int(29334)
                ["idx"] => int(88888)
            }
            ["a7aa94c38aa49caa"] => array(2) {
                ["pid"] => int(20568)
                ["vid"] => int(26547)
                ["idx"] => int(88888)
            }
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Apple"
            ["bsln"] => string(8) "AppleApple"
        }
    }
    [1] => array(2) {
        ["aaa"] => array(3) {
            ["abd296a10"] => array(2) {
                ["pid"] => int(56734)
                ["vid"] => int(98612)
                ["idx"] => int(99999)
            }
            ["a31e920fde8"] => array(2) {
                ["pid"] => int(09800)
                ["vid"] => int(34521)
                ["idx"] => int(99999)
            }
            ["a7aa94c38aa49caa"] => array(2) {
                ["pid"] => int(20568)
                ["vid"] => int(26547)
                ["idx"] => int(99999)
            }
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Ball"
            ["bsln"] => string(8) "BallBall"
        }
    }
}
以下是我想要输出的内容:

array(2) {
    ["88888"] => array(3) {
        ["a19a3234b881ce"] => array(4) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(88888)
            ["arr"] => string(14) "a19a3234b881ce"
        }
        ["a7aa94c38aa49caa"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(88888)
            ["arr"] => string(16) "a7aa94c38aa49caa"
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Apple"
            ["bsln"] => string(8) "AppleApple"
        }
    }
    ["99999"] => array(4) {
        ["abd296a10"] => array(4) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(99999)
            ["arr"] => string(9) "abd296a10"
        }
        ["a31e920fde8"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["arr"] => string(11) "a31e920fde8"
        }
        ["a7aa94c38aa49caa"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["arr"] => string(16) "a7aa94c38aa49caa"
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Ball"
            ["bsln"] => string(8) "BallBall"
        }
    }
}
试试这个例子:

$result = [];
foreach($data as $item) {
    if (!empty($item['aaa']) && is_array($item['aaa'])) {
        $key = array_values($item['aaa'])[0]['idx'] ?? null;
        if ($key) {
            $result[$key] = array_merge($item['aaa'], ['bbb' => $item['bbb'] ?? []]);
        }
    }
}

// Test result:
print_r($result);

#1:数组是如何生成的?你能控制它吗#2:您要重新写入的数组是否始终处于“aaa”?#1-我无法控制原始数组。它以序列化数组的形式出现,我将其取消序列化()#2是的,他们总是在[aaa]。[aaa]数组中的数组键是动态生成的,可以有任意数量的键。您会注意到,在所需的输出数组中,我需要按idx值排序的数据,并将该值分配给每个键。转换背后有什么规则吗?既然您已经编写了预期的输出,为什么不将其复制并粘贴到脚本中?@NicoHaase方法是获取原始数组数据,将其放入基于[idx]值构造的数组中。然后,我将创建一个foreach循环,查找每个idx键,并在页面和/或导出文件中显示每个键包含的数据。这正是我想要做的。非常感谢你付出努力帮助我度过难关。然而,基于你的例子,我确实做了一些修改。请参阅我的评论。我会尽快投票。我添加了cky值,并使用idx、cky和arr值创建了唯一的数组键。最终的输出并不完全是我最初希望得到的,但它会做我需要它做的事情。我使用以下命令更改数组键:$nkeys=substr($item['idx'],-4)。'-'。子项($item['arr],-4)。'-'。substr($item['cky'],-4);我的最终输出基于@user14717238示例代码。更正:我的最终输出受@user14717238示例代码的启发,而不是完全基于它since@user14717238的更像是我最初的输出请求,与我发布的答案有所不同。我很高兴能够提供帮助,您的问题已经解决。还有一点提示:$item['idx']是一个整数,如果您想将密钥长度保持在四个前导数字内,那么对于小于1000的值,可以使用零缩进-
substr(sprintf('%04d',$item['idx']),-4)
Final Output

array(5) {
    ["8888-81ce-4f15"] => array(5) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(88888)
            ["cky"] => string(8) "d9b04f15"
            ["arr"] => string(14) "a19a3234b881ce"
    }
    ["8888-9caa-8ac0"] => array(5) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(88888)
            ["cky"] => string(8) "fa71c3f5f8ac0"
            ["arr"] => string(16) "a7aa94c38aa49caa"
    }
    ["9999-6a10-dbb9"] => array(5) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(99999)
            ["cky"] => string(8) "e3fc1fdbb9"
            ["arr"] => string(9) "abd296a10"
    }
    ["9999-fde8-f409"] => array(5) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["cky"] => string(8) "88195c46f409"
            ["arr"] => string(11) "a31e920fde8"
    }
    ["9999-9caa-8ac0"] => array(5) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["cky"] => string(8) "fa71c3f5f8ac0"
            ["arr"] => string(16) "a7aa94c38aa49caa"
        }
    }
}