arraykeypath
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function array_keypath($array, $path) {
if(!is_array($path)) {
$path = preg_split('/[\s\.]*\[([^\]]+)\]\s*|\.+/', $path, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
while(($step = array_shift($path)) !== null) {
if(!isset($array[$step])) {
return null;
}
$array = $array[$step];
}
return $array;
}
?>
function array_keypath($array, $path) {
if(!is_array($path)) {
$path = preg_split('/[\s\.]*\[([^\]]+)\]\s*|\.+/', $path, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
while(($step = array_shift($path)) !== null) {
if(!isset($array[$step])) {
return null;
}
$array = $array[$step];
}
return $array;
}
?>
Wat testdata, ter inspiratie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$array = array(
'array' => array(
42 => array(
'al fa' => array(
'beta' => array(
'gamma' => array(
'alfa' => 'correct'
)
)
),
'aalfa' => 'wrong'
)
)
);
$path1 = 'array[42] [al fa] . [beta][gamma][alfa]';
$path2 = 'array.42.al fa.beta.gamma.alfa';
$path3 = 'array[42][al fa] .beta..gamma[alfa]';
var_dump(array_keypath($array, $path1)); // "correct"
var_dump(array_keypath($array, $path2)); // "correct"
var_dump(array_keypath($array, $path3)); // "correct"
?>
$array = array(
'array' => array(
42 => array(
'al fa' => array(
'beta' => array(
'gamma' => array(
'alfa' => 'correct'
)
)
),
'aalfa' => 'wrong'
)
)
);
$path1 = 'array[42] [al fa] . [beta][gamma][alfa]';
$path2 = 'array.42.al fa.beta.gamma.alfa';
$path3 = 'array[42][al fa] .beta..gamma[alfa]';
var_dump(array_keypath($array, $path1)); // "correct"
var_dump(array_keypath($array, $path2)); // "correct"
var_dump(array_keypath($array, $path3)); // "correct"
?>