Преобразуйте массив в строки в php - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь преобразовать этот массив

array(3) {
  ["Men"]=>
  array(2) {
    ["Sport shoes"]=>
    array(1) {
      ["Football shoes"]=>
      array(0) {
      }
    }
    ["Winter shoes"]=>
    array(0) {
    }
  }
  ["Women"]=>
  array(0) {
  }
  ["Childrens"]=>
  array(0) {
  }
}

к этому результату

Men
Men -> Sport shoes 
Men -> Sport Shoes -> Football shoes 
Men -> Winter shoes 
Women 
Childrens

Я перепробовал много методов, но безуспешно. Может кто-нибудь сказать мне, как это сделать.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Возможный рекурсивный подход может работать следующим образом:

Начиная с пустой строки, итерируйте массив и добавьте каждый ключ к результату.Прежде чем перейти к следующей итерации, если значение не пустое, добавьте результат рекурсивного вызова.Когда вы дойдете до конца, у вас должна быть строка, представляющая всю структуру.

function get_map(array $array, string $path = ''): string
{
    $result = '';
    foreach ($array as $key => $value) {
        $result .= "$path$key\n" . ($value ? get_map($value, "$path$key->") : '');
    }
    return $result;
}
echo get_map($array);
0 голосов
/ 17 сентября 2018

Это можно сделать с помощью простой рекурсивной функции, подобной этой:

function printArray($array, $path = []) {
    if (!is_array($array) || count($array) < 1) {
        return;
    }
    foreach ($array as $k => $v) {
        if (count($path) > 0) {
            echo implode(' -> ', $path) . ' -> ';
        }
        echo $k . PHP_EOL;
        printArray($v, array_merge($path, [$k]));
    }
}

Демонстрационная версия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...