joomla — упорядочить массив из другого массива переполнения стека

Используя JFolder:

$tree = JFolder::listFolderTree('myfolder');

Перечисляет древовидную структуру следующим образом: (ignore и ignore2 являются подпапками внутри каждой папки b, n, v)

 Array
(
[0] => Array
(
[id] => 1
[parent] => 0
[name] => b
[fullname] => myfolder/b
[relname] => myfolder/b
)

[1] => Array
(
[id] => 2
[parent] => 1
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[2] => Array
(
[id] => 3
[parent] => 1
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)

[3] => Array
(
[id] => 4
[parent] => 0
[name] => n
[fullname] => myfolder/n
[relname] => myfolder/n
)

[4] => Array
(
[id] => 5
[parent] => 4
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[5] => Array
(
[id] => 6
[parent] => 4
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)

[6] => Array
(
[id] => 7
[parent] => 0
[name] => v
[fullname] => myfolder/v
[relname] => myfolder/v
)

[7] => Array
(
[id] => 8
[parent] => 7
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[8] => Array
(
[id] => 9
[parent] => 7
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)

)

Таким образом, мы можем видеть порядок папок: 0 имеет имя «b» 1 имеет имя «n» и 2 имеет имя «v».

Теперь я хочу упорядочить их в определенном пользователем порядке из массива:

$user_defined_array = [b,v,n];

Так что теперь порядок $ tree должен 0 => b, 1 => v and 2 => n и если пользователь изменяет массив как [n,v,b] тогда порядок должен быть таким.

Например, если пользовательский массив, например, [b,v,n] результирующий массив должен выглядеть так:

 Array
(
[0] => Array
(
[id] => 1
[parent] => 0
[name] => b
[fullname] => myfolder/b
[relname] => myfolder/b
)

[1] => Array
(
[id] => 2
[parent] => 1
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[2] => Array
(
[id] => 3
[parent] => 1
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)[3] => Array
(
[id] => 4
[parent] => 0
[name] => v
[fullname] => myfolder/v
[relname] => myfolder/v
)

[4] => Array
(
[id] => 5
[parent] => 4
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[5] => Array
(
[id] => 6
[parent] => 4
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)

[6] => Array
(
[id] => 7
[parent] => 0
[name] => n
[fullname] => myfolder/n
[relname] => myfolder/n
)

[7] => Array
(
[id] => 8
[parent] => 7
[name] => ignore
[fullname] => myfolder/ignore
[relname] => myfolder/ignore
)

[8] => Array
(
[id] => 9
[parent] => 7
[name] => ignore2
[fullname] => myfolder/ignore2
[relname] => myfolder/ignore2
)

)

Я надеюсь, что вопрос ясен, и я надеюсь, что есть способ.

0

Решение

Вы можете сделать это, как я понимаю ваш вопрос

$user_defined_array = array('b','v','n');
$newarr = array();
$i=0;$k=1;
foreach($user_defined_array as $a){
foreach($tree as $b){
if($k==0 && !in_array($b['name'],$user_defined_array)){
$newarr[$i] = $b;$i++;
}else{$k=1;}
if($b['name']==$a) {
$newarr[$i] = $b;
$k=0;$i++;
}

}

}
var_dump($newarr);

Это выведет массив на основе вашего нового определенного пользователем массива.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]