learnMedlem sedan jan. 20051 130 inlägg Lite knep å knåp för den klurige...
Jag har en multidimensionell array som jag vill kunna plocka ut värden ifrån mha en textsträng i formatet "sökväg/till/värdet". Arrayen vet jag alltså inte hur den ser ut i förväg.
Närmare förklaring:
function getValue($array, $path)
{
// Här händer det...
return $value;
}
$array = array(
'ett' => 'Ett'
'tva' => 'Två'
'tre' => array(
'tretva' => array(
'tretre' => 'Tre'
)
)
);
getValue($array, 'tva'); // Två
getValue($array, 'tre/tretva/tretre'); // Tre
getValue($array, 'tre/tretva'); // array('tretre' => 'Tre')
getValue($array, 'fyra'); // null
Hur ska min funktion se ut? Jag lyckas inte...
SPiNMedlem sedan mars 20007 896 inlägg Ett enkelt förfarande kan ju vara;
function array_xpath(&$array, $path) {
$nodes = explode('/', $path);
return __helper_array_xpath($array, $nodes);
}
function __helper_array_xpath(&$base, &$nodes) {
if (($node = array_shift($nodes)) && isset($base[$node])) {
if (sizeof($nodes) > 0 && is_array($base[$node])) {
return __helper_array_xpath($base[$node], $nodes);
} elseif (sizeof($nodes) == 0) {
return $base[$node];
}
}
return false;
}
$a = array(
'ett' => 'hej',
'tva' => array(
'tre' => 'hopp',
'fyra' => array(
'fem' => 'stopp!'
)
)
);
echo array_xpath($a, 'tva/fyra/fem'); // stopp!
echo array_xpath($a, 'nio/trettioett'); // [false]
Ett annat förfarande kan ju vara att titta på hur CakePHP har löst det, dom sitter inne på någon typ av XPath-för-arrayer-funktion: http://api.cakephp.org/view_source/set/#line-373
learnMedlem sedan jan. 20051 130 inlägg Hmm, tack för ditt tips, får det inte riktigt att funka. Någon som kikat på CakePHP's lösning?
Någon annan som har förslag på hur jag kan lösa detta på ett enkelt sätt? Som det är idag använder jag funktionen eval() vilket inte känns helt rätt...
SPiNMedlem sedan mars 20007 896 inlägg Hur menar du att du inte får det att fungera? Det fungerar enligt spec. från ditt första inlägg.