Я имею дело с асимметричными типами массивов, где один и тот же тип информации может иметь разные пути.Поскольку источники, из которых состоят эти массивы, со временем останутся на одной и той же структуре, для извлечения информации из массива будет достаточно сохранить положение информации в массиве.
Поэтому, пожалуйста, учтите следующее(сокращенный) сценарий:
{* 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
) и строка, полученная из базы данных?