我正在处理非对称数组类型,其中相同类型的信息可以具有不同的路径。由于构成这些数组的源将随时间推移保持在相同的结构上,因此为了从数组中检索信息,将信息的位置存储在数组中就足够了。
因此,请考虑以下(缩短的)情况:
{* 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
)和从数据库检索的字符串来组成它们呢?