php — обработка структуры навигации перетаскиванием

#php #navigation #parent

#php #навигация #родительский

Вопрос:

я пытаюсь создать структуру навигации перетаскивания (с использованием пользовательского интерфейса jquery). Я думаю, что я выполнил часть jquery, которая находит все «страницы», у которых нет дочерних элементов, и работает в обратном направлении, чтобы создать brach, и все ветви затем передаются на сервер.

допустим (в небольшом масштабе для тестирования) После объединения ветвей я получаю следующий массив:

 Array
(
    [post-id-2] => Array
        (
            [post-id-5] => 
        )

    [post-id-3] => Array
        (
            [post-id-4] => post-id-1
        )

)
  

Итак, теперь я хочу обновить свою таблицу навигации, чтобы установить правильный идентификатор страницы с помощью page_parentid поэтому я попробовал следующее, но ничего не добился:

 $array = array();
$query_str = '';

foreach( $_POST['branch'] as $branch ) {
    eval('$array = array_merge( $array, ' . $branch . ');');        
}

function recrusive_parent_child( $parent, $array ) {
    $str = $parent;
    if( is_array( $array ) ) {
        foreach( $array as $parent => $branch ) {
            $str .= recrusive_parent_child( $parent, $branch );
        }
    }else{
        return $str;
    }
}

foreach( $array as $parent => $branch ) {
    echo recrusive_parent_child( $parent, $branch );
}

print_r($array);
die();
  

но отображается только исходный объединенный массив, ничего из функции. Кто-нибудь может подтолкнуть меня в правильном направлении?

Комментарии:

1. Почему вы используете eval в eval('$array = array_merge( $array, ' . $branch . ');'); ? Почему бы просто не использовать $array = array_merge( $array, $branch); Также, не могли бы вы опубликовать точный вывод print_r($array); и print_r($_POST); ?

Ответ №1:

Возможно, это потому, что array_merge ничего не делает, но это действительно зависит от ваших входных данных. Давайте возьмем первую итерацию foreach в вашем примере, там строка, которая передается в eval(), является:

 $array = array_merge( $array, Array);
  

Это потому $branch , что это массив, а массив, преобразованный в строку, является «массивом».

Однако это должно выдать вам «синтаксическую ошибку в коде eval’d», потому что «array» является зарезервированным словом и за ним должно следовать «(«.

Вы действительно должны избавиться от eval()-решения. Опубликуйте желаемый результат, и мы поможем вам найти правильное решение.

Комментарии:

1. jquery создает массив php, eval просто вводит его в действие