将数组路径存储在数据库中以供以后在Smarty模板中使用

时间:2018-12-10 13:35:32

标签: smarty

我正在处理非对称数组类型,其中相同类型的信息可以具有不同的路径。由于构成这些数组的源将随时间推移保持在相同的结构上,因此为了从数组中检索信息,将信息的位置存储在数组中就足够了。

因此,请考虑以下(缩短的)情况:

{* 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)和从数据库检索的字符串来组成它们呢?

0 个答案:

没有答案