如何根据原始数组中的值将 PHP 多维数组转换为另一个数组?
How to convert a PHP multi-dimensional array into another array based on a value within the original array(s)?
我在这上面花了一个星期,我正在尝试想出一种方法来访问多维数组中的数据并将其输出到另一个数组,根据数组中的值进行不同的重组.而不是 post 行和行的损坏代码,我展示了我的示例简化:
这里是原始数组:
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);
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"
}
}
}
我在这上面花了一个星期,我正在尝试想出一种方法来访问多维数组中的数据并将其输出到另一个数组,根据数组中的值进行不同的重组.而不是 post 行和行的损坏代码,我展示了我的示例简化:
这里是原始数组:
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);
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"
}
}
}