私はこれを作成しました:
データ
<?php
$data = [
183013 => [
183014 => [
183018,
183019 => [
183021,
183022 => [
183023
]
],
183020
],
183016,
183017
]
];
$path = [183013, 183014, 183019, 183021];
$new_data = [183030 => [183031]];
ソリューション1 - 再帰関数
はにデータを提供します各ノードが追加されます。それはトリックのevalモード
、および -
var_dump(appendIntoArrayTree($data, $path, $new_data));
解決方法2: は、我々は(つまり、 '0 => 183020')
<?php function appendIntoArrayTree(array $source, array $path, array $values) {
$key = array_shift($path);
if (isset($source[$key]) && is_array($source[$key])) {
$source[$key] = appendIntoArrayTree($source[$key], $path, $values);
}
else {
// search if the current $path key exist as 'value' on the $source (i.e.: '0 => 183021')
if(!is_null($foundKey = array_search($key, $source))) {
unset($source[$foundKey]);
}
$source[$key] = $values; // final
}
return $source;
}
と出力の最終数値を削除する必要があります私はそれを使用することを奨励していません(さらに、一部のサーバーでは、eval()
の使用を許可しません)
function appendIntoArrayTreeWithEval(array $source, array $path, array $values) {
$path_last = $path[count($path) - 1];
$path_string = implode('',
array_map(function($v) {
return '[' . $v . ']';
}, array_slice($path, 0, count($path) - 1))
); // Convert $path = ['a', 'b', 'c'] to string [a][b] (last 'c' not used)
$tmp = null;
eval('$tmp = isset($source' . $path_string . ') ? $source' . $path_string . ' : null;');
if(is_null($tmp)) {
// $source[a][b] does not exists
eval('$source' . $path_string . '[' . $path_last . '] = $values;');
}
else if(is_array($tmp)) {
if(!is_null($key = array_search($path_last, $tmp))) {
// key exists with 'numeric' array key value (0 =>, 1 =>, ...)
eval('unset($source' . $path_string . '[' . $key . ']);'); // remove
}
eval('$source' . $path_string . '[' . $path_last . '] = $values;');
} else {
// is string/numeric/... Error. SHould not use 0/1/2 ... values
}
return $source;
}
と出力
var_dump(appendIntoArrayTreeWithEval($data, $path, $new_data));
ソリューション1は右、すべての数字がユニークで最高:)
(我々はまた、array merge recursive
機能を試してみましたが、それは動作しません)
です? – RomanPerekhrest
array_pushメソッドを検索して試してみることができます – C2486
数字が一意ではないと思います – EugenA