У меня есть скрипт, который обрабатывает именование родительских/дочерних элементов на другой странице. Формат имени похож на E5-2-3
, который представляет третий дочерний элемент второго дочернего элемента пятого элемента.PHP - Увеличение массива на основе позиции индекса
Что мне нужно сделать, это передать родительское имя функции и вернуть имя для следующего дочернего элемента. Это значение будет приращением последнего ребенка или 1, если это первый ребенок.
(я надеюсь, что это имеет некоторый смысл для кого-то)
Массив индекса выглядит примерно так:
1=>null
2=>null
3=>
1=>null
2=>null
3=>
1=>null
4=>null
5=>
1=>null
2=>
1=>null
2=>null
3=>null //the element I was talking about above
6=>
1=>null
7=>null
Мой код до сих пор является
$projectNumber = $_GET['project_number'];
@$parentNumber = $_GET['parent_number']; //suppressed as it may not be set
$query = mysql_query("SELECT e_numbers FROM project_management WHERE project_number = '$projectNumber'");
$resultArray = mysql_fetch_assoc($query);
$eNumbers = unserialize($resultArray['e_numbers']);
if (!is_array($eNumbers)&&!isset($parentNumber)){ //first e_number assigned
$eNumbers[1] = null; //cant possibly have children so null for now
$nextENumber = 'E1';
}else{
if (!isset($parentNumber)){
$nextNumber = count($eNumbers)+1;
$eNumbers[$nextNumber] = null; //cant possibly have children so null for now
$nextENumber = 'E'.$nextNumber;
}else{
$parentIndex = explode('-', str_replace('E', '', $parentNumber));
//$nextENumber = //assign $nextENumber the incremented e number
}
}
echo $nextENumber;
//(then goes on to update sql etc etc)
Это все хорошо, но для строки, где мне нужно получить/назначить глубокие числа. Я думаю, что это должна быть какая-то рекурсивная функция, основанная на массивах $parentIndex
и $eNumbers
, однако я немного из глубины, когда речь идет о рекурсии.
Любая указатель в правильном направлении будет большой помощью.
PS Если есть лучший способ справиться с возрастающими родительскими/дочерними отношениями, я все уши. Единственным, что вне моего контроля формата чисел, передаваемый в/из (Должно быть EX-Y-Z-...
)
UPDATE я смог развить @ircmaxell функции «s функционировать более лучше в моем контексте. Функция потребовала, чтобы вы передали массив с нулевым значением (может быть пустым) и необязательный путь. Он возвращает новый путь и обновляет массив индексов, чтобы включить новый путь. Сообщение об ошибке возвращается, если индекс не найден.
function getNextPath(&$array, $path) { //thanks to ircmaxell @ stackoverflow for the basis of this function
$newPath = '';
$tmp =& $array;
if (is_string($path)) {
$path = explode('-', str_replace('E', '', $path));
$max = count($path);
foreach ($path as $key => $subpath) {
if (is_array($tmp)) {
if (array_key_exists($subpath, $tmp)){
$tmp =& $tmp[$subpath];
$newPath[] = $subpath;
}else{
return "Parent Path Not Found";
}
}
}
}
$tmp[] = null;
$newPath[] = count($tmp)-1;
if (count($newPath)>1){
$newPath = implode('-', $newPath);
}else{
$newPath = $newPath[0];
}
return "E".$newPath;
}
"// подавлено, поскольку оно не может быть установлено" --- 1) что это "оно"? 2) 'isset' – zerkms
Thats parent_number. Это строка типа ''E5-2-3'' –