我有一个多维数组,如下所示:
$importer = new CsvImporter("small.txt",true,":");
$data = $importer->get();
echo json_encode($data);
[{
"\ufeff#product_num": "5",
"name": "tv",
"cost": "59.99"
},
{
"\ufeff#product_num": "7",
"name": "radio",
"cost": "10.99"
}]
所以,我可以在树结构中添加另一个数组:
$items = array(
'one' => array(
'a' => array(),
'b' => array(),
'c' => array()
),
'two' => array(
'd' => array(),
'e' => array(),
'f' => array()
),
'three' => array(
'g' => array(),
'h' => array(),
'i' => array()
)
);
但如果我不知道$items['one']['c'][] = array( 'j' => array() );
在c
范围内,我该怎样才能实现这一目标?我查看了one
,但只返回array_search
。我认为那是因为我所寻找的并不是在阵列的最顶层?
我知道false
存在,但我不知道它在哪个子阵列中以及它走多远。这可能吗?
答案 0 :(得分:1)
如果我理解正确,这个功能会做你想要的:
<?php
$items = array(
'one' => array(
'a' => array(),
'b' => array(),
'c' => array()
),
'two' => array(
'd' => array(),
'e' => array(),
'f' => array()
),
'three' => array(
'g' => array(),
'h' => array(),
'i' => array()
)
);
function addToSub($items, $key, $addItem) {
foreach($items as &$item) {
if (in_array($key, array_keys($item))) {
$item[$key][] = $addItem;
}
}
return $items;
}
$items = addToSub($items, 'c', array( 'j' => array() ));
echo "<pre>";
var_dump($items);
echo "</pre>";
输出:
array(3) {
["one"]=>
array(3) {
["a"]=>
array(0) {
}
["b"]=>
array(0) {
}
["c"]=>
array(1) {
[0]=>
array(1) {
["j"]=>
array(0) {
}
}
}
}
答案 1 :(得分:0)
我认为你正在实施一棵树。 您要做的第一件事就是找到要附加孩子的节点。 (在您的示例中,节点为c,子节点为j)
通过递归实现DFS搜索,我编写了以下代码。 (确保您正在搜索的节点存在,否则该函数将返回空数组)
<?php
$arr = [
'one' => [
'a' => [],
'b' => [],
'c' => [],
],
'two' => [
'd' => [],
'e' => [],
'f' => [],
],
'three' => [
'g' => [],
'h' => [],
'i' => [],
],
];
$arr = insertArr($arr, 'c', 'j');
print_r($arr);
function insertArr(array $arr, string $key, string $new): array {
// If key is found in $arr, append the child and return it.
if (array_key_exists($key, $arr)) {
$arr[$key][$new] = [];
return $arr;
}
// search the key in child node(next dimention)
foreach ($arr as $subArrKey => $subArr) {
// result will be empty if the key is not in child $subArr
$result = insertArr($subArr, $key, $new);
if (!empty($result)) {
// If the key is found in $subArr,
// replace $subArr with $result,
// which is the same as the $subArr but appended with child.
$arr[$subArrKey] = $result;
return $arr;
}
}
return [];
}
现在,您可以将'k'附加到'one','c'或'j'。 要将'k'附加到'j',只需写下:
$arr = insertArr($arr, 'j', 'k');
答案 2 :(得分:0)
array_search将查找一个值,在您的示例中,所有子数组都为空。
如果我没有弄错的话,您可以使用array_map并针对每个子阵列检查您是否存在使用array_key_exists寻找的密钥:
$result = array_map(function($item) {
if (array_key_exists("c", $item)) {
$item["c"]["j"] = [];
}
return $item;
}, $items);