私のサイトには人間が読めないURLがあり、私が持っている製品、カテゴリ、ブランドごとにURLを解析する必要があります。このタスクは、多次元配列を走査して変更を加える(ノードを追加する)必要があるコードに私を導きました。ポインタで多次元配列をウォークして変更する
私は、次の配列持っている:私はそれを歩くと、特定の条件でいくつかの変更を行いたい
$a = array(
'product' => array(
'oven' => array(
'url' => 'http',
'category' => array(
'single' => array(
'url' => 'http2'
)
)
)
)
);
をので、私はポインタを維持する必要があります。今
私のコードは次のとおりです。
$data = array('product' => 'oven', 'category' => 'single');
$pointer = &$a;
foreach ($data as $field => $value) {
func($field, $value, $pointer);
print_r($a);
print_r($pointer);
}
function func($field, $value, &$pointer) {
if (isset($pointer[$field][$value])) {
echo 'exists';
// moving into
$pointer = &$pointer[$field][$value];
} else {
echo 'does not exist';
$pointer[$field][$value] = array('url' => 'someUrl');
// moving into
$pointer = &$pointer[$field][$value];
}
}
出力はライン「内に移動すると、」動作しないことを示しています。
exists
Array
(
[product] => Array
(
[oven] => Array
(
[url] => http
[category] => Array
(
[single] => Array
(
[url] => http2
)
)
)
)
)
Array
(
[product] => Array
(
[oven] => Array
(
[url] => http
[category] => Array
(
[single] => Array
(
[url] => http2
)
)
)
)
)
does not exist
Array
(
[product] => Array
(
[oven] => Array
(
[url] => http
[category] => Array
(
[single] => Array
(
[url] => http2
)
)
)
)
[category] => Array
(
[single] => Array
(
[url] => someUrl
)
)
)
Array
(
[product] => Array
(
[oven] => Array
(
[url] => http
[category] => Array
(
[single] => Array
(
[url] => http2
)
)
)
)
[category] => Array
(
[single] => Array
(
[url] => someUrl
)
)
)
期待している結果を表示してください。 – jaro1989