Сохранение пути массива в базе данных для последующего использования в шаблоне Smarty - PullRequest
0 голосов
/ 10 декабря 2018

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

Поэтому, пожалуйста, учтите следующее(сокращенный) сценарий:

{* this is assigned var $users used in template bellow *}
array => ['name' => 'user1', 'addresses' => ['address1' => 'abc', 'address2' => 'bcd'], 
          'name' => 'another User', 'address' => 'xdf']

{* this is stored in database and will be retreived using existing getAddressPath($user) function *}
array => [['name' => 'user1', 'addressPath'=> 'user.addresses.address2'], 
          ['name' => 'another User', 'addressPath'=> 'user.address']]

Краткое примечание: конечно, выглядит немного странно хранить вид карты для исправления пути массива, но мне это нужно, поскольку я имею дело со смешанными данными, для некоторыхВ этом случае положение требуемой информации в массиве будет другим, например, в более глубоком пути массива.Вышеуказанные массивы просто для того, чтобы дать подсказку по этому вопросу, поэтому, пожалуйста, не беспокойтесь о деталях и сосредоточьтесь на вопросах.

{* in template I can retreive the user's array path to correct position of address field *}
{foreach $users as $user}
    {$addressPath = getAddressPath($user['name'])}      {* this will return the path stored in db as a string *}
    {$address = $user.$addressPath}         {* this should return the address given by the addressPath value *}
    {$user['name']} preferred addres is: {$address} <br/>
{/foreach}

Вопрос 1: какой должен быть формат для хранимой строки?

Вопрос 2: какой должен быть синтаксис для доступа к пути массива?

Обходные пути: для вопроса 2 синтаксисы $address = $user['addreses']['address2'] или $address = $user['address'] с жестким кодом дают правильные результаты, но как их составить, используя переменную ($addressPath) и строка, полученная из базы данных?

...