我尝试了很多代码,但是这给了我接近我想要的结果。 我想在这种情况下将第二个数组'eric'=> array转换为整数'0'=> array
的子元素的键while($d = mysqli_fetch_assoc($result)) {
if(!isset($data[$d['country']])) {
$data[$d['country']] = array(
'text' => $d['country'],
'nodes' => array()
);
}
if(!isset($data[$d['country']]['nodes'][$d['name']])) {
$data[$d['country']]['nodes'] = array_values($data[$d['country']]['nodes']);
$data[$d['country']]['nodes'][$d['name']] = array(
'text' => $d['name'],
'nodes' => array()
);
}
array_push($data[$d['country']]['nodes'][$d['name']]['nodes'], $d['n_doc']);
}
但是带有节点的第一条记录不接受它,如下所示:
0 => Array
('text' => 'paris',
'nodes' => Array
('0' => Array
( 'text' => 'eric',
'nodes' => Array
(0 => Array
(
'text' => 'so.png',
),
1 => Array
(
'text' => 'dd.png',
),
2 => Array
(
'text' => 'dd.png',
),
),
),
),
('charl' => Array
( 'text' => 'charl',
'nodes' => Array
(0 => Array
(
'text' => 'so.png',
),
),
),
),
),
任何人都可以告诉我问题出在哪里。 我想要这样的数组:
0 => Array
('text' => 'paris',
'nodes' => Array
('0' => Array
( 'text' => 'eric',
'nodes' => Array
(0 => Array
(
'text' => 'so.png',
),
1 => Array
(
'text' => 'dd.png',
),
2 => Array
(
'text' => 'so.png',
),
),
),
),
('1' => Array
( 'text' => 'charl',
'nodes' => Array
(0 => Array
(
'text' => 'so.png',
),
),
),
),
),
答案 0 :(得分:2)
在遍历每个国家/地区后,可能在关键节点上使用array_map()。然后,我们可以在array_keys()上使用它们array_search()来查找节点“文本”的位置以使其为数字。
for($i = 0; $i <= count($data) -1; $i++) { # This loops through each country
$data[$i]['nodes'] = array_map(function($node) use($data, $i) { # This preserves the parent text value
return array(
'text' => array_search($node['text'], array_keys($data[$i]['nodes'])), # This replaces the text with a numerical value
'nodes' => $node['nodes'] # Preserve this
);
}, $data[$i]['nodes']);
}
输出
[ ... => [ text => Paris, nodes => [ text => 0, ... ] ... ] ... ]
更新:要将所有子键更改为数字值,只需使用array_values()
for($i = 0; $i <= count($data) -1; $i++) {
$data[$i]['nodes'] = array_map(function($nodes) {
$newArr = array($nodes['text']);
array_push($newArr, array_values($nodes['nodes']));
return $newArr;
}, $data[$i]['nodes']);
}
输出
[ ... => [ text => Paris, nodes => [ 0 => Paris, 1 => [ ... ] ] ... ] ... ]
Output在保留父名称的同时用数字值替换名称。