Я знаю, что http_build_query() и parse_str() - лучшее решение для такого рода проблем, но я не могу изменить структуру данных в конкретном проекте, над которым я работаю, поэтому я пытаясь упростить некоторые вещи, создав большие трехмерные ассоциативные массивы из хранимой строки базы данных.Создание пользовательской функции php «explode» recursive
Может кто-нибудь, пожалуйста, дайте мне руку, делая эту функцию рекурсивной? Я хочу, чтобы взять что-то вроде этого:
explode3D($separators = array('|',','),
$string = "val1,val2|val1,val2,val3",
$keys = "cat1,item1,item2|cat2,item1,item2,item3"
);
И вернуть что-то вроде этого
Array (
'cat1' => Array('item1'=>'val1', 'item2'=>'val2'),
'cat2' => Array('item1'=>'val1', 'item2'=>'val2', 'item3'=>'val3')
)
Вот функция до сих пор:
function explode3D($separators,$string,$keys=0){
$res = array();
if(is_array($separators)){//MULTI DIMENSION MODE: (unfinished!!)
//help needed here//
}else{//SINGLE DIMENSION MODE:
$vals = explode($separators,$string);
if($keys === 0){ //NO KEYS:
$res = $vals;
}else if($keys === 1){//ALTERNATE ROWS ARE KEYS:
$key = '';
for($i=0; $i<sizeof($vals); $i++){
if ($i++ % 2 == 1){ //every second element:
$key = $vals[$i]; //save the key
}else{
$res[$key] = $vals[$i]; //set the saved key = value
}
}
}else{ //GET KEYS FROM $keys ARRAY:
if(is_string($keys)){ //explode keys string if necessary (using $separators)
$keys = explode3D($separators,$keys);
}
for($i=0; $i<sizeof($vals); $i++){
$res[$keys[$i]] = $vals[$i];
}
}
}
return($res);
}
В чем проблема? – powtac
Можем ли мы знать, каковы ваши данные? я имею в виду, если бы вы могли разместить некоторые данные образца вместе с вашим кодом, нам было бы легче отлаживать ваш код или обновлять его или предлагать что-то другое. – verisimilitude
Извините, обновил вопрос на примере. – cronoklee