Проблема в том что getShortName(); выдаёт имя в массиве
if("RegistrationData" == $type->getShortName()) {
Как должна выглядеть функция, чтоб рекурсия происходила внутри функции, а не на саму функцию.
function parents($tree, $childKey) {
$parents = [];
$endOfTree = false;
$minLevel = 1;
$currentLevel = 1;
$parentBranches = [];
$branch = $tree;
$branchKey = key($branch);
$branchValue = current($branch);
while (!$endOfTree) {
// Обработка текущего элемента
if (strpos($childKey, $branchKey . ".") === 0 && $branchKey !== $childKey) {
$parents[] = (string)$branchKey;
}
// Переключение ветки на внутренни уровень, если он есть
if (is_array($branchValue) && !empty($branchValue)) {
$currentLevel++;
$parentBranches[] = $branch;
$branch = $branchValue;
$branchKey = key($branch);
$branchValue = current($branchValue);
continue;
}
// Переключение на следующий элемент
$branchValue = next($branch);
$branchKey = key($branch);
// В случае, если следующего элемента нет, возврат на уровень выше или завершение цикла
if ($branchValue === false) {
$branch = array_pop($parentBranches);
$currentLevel--;
// Возврат на уровень выше, если это возможно
if ($currentLevel >= $minLevel) {
$branchValue = next($branch);
$branchKey = key($branch);
// Завершение цикла, если уровень минимальный
} else {
$endOfTree = true;
}
}
}
// Смена направления массива и возвращение результата
return array_reverse($parents);
}
// Проверка
parents($tree, '1.3.2.2');
/*
array(3) {
[0]=>
string(5) "1.3.2"
[1]=>
string(3) "1.3"
[2]=>
string(1) "1"
}
*/
UPDATE /* */ SET `id` = LAST_INSERT_ID(`id`), /* */
var objectList = [
{id:40, prevId:22},
{id:22, prevId:52},
{id:4364, prevId:40},
{id:4, prevId:'none'},
{id:52, prevId:4}
];
function sortSequential(objectList, coupleFrom, coupleTo, minValue) {
var sorted = [];
var couplingFound = true;
var couplingValue = minValue;
while(couplingFound) {
couplingFound = false;
for (var i=0; i<objectList.length; i++) {
if (objectList[i][coupleTo] === couplingValue) {
sorted.push(objectList[i]);
couplingValue = objectList[i][coupleFrom];
couplingFound = true;
break;
}
}
}
return sorted;
}
objectList = sortSequential(objectList, 'id', 'prevId', 'none');
var objectList = [
{id:1, parentId:2},
{id:2, parentId:4},
{id:3, parentId:1},
{id:4, parentId:'none'}
];
objectList.sort(function(someObject, otherObject) {
if (someObject.parentId === 'none') {
return -1;
}
return someObject.parentId >= otherObject.parentId ? -1 : 1;
});
function getCustomField($code, $object)
{
$result = [];
foreach ($object['custom_fields'] as $customField) {
if ($customField['code'] !== $code) {
continue;
}
foreach ($customField['values'] as $value) {
$result[] = $value['value'];
}
}
return array_values(array_unique($result));
}
$emails = getCustomField("EMAIL", $object);
$emails = implode("; ", getCustomField("EMAIL", $object));
$email = array_shift(getCustomField("EMAIL", $object));
SELECT
`some_table`.*
FROM
`some_table`
LEFT JOIN `other_table` ON (`other_table`.`id`=`some_table`.`id`)
WHERE
`other_table`.`id` IS NULL
Проблема в том, что число записей около 1 миллиона в каждой таблице :(