2017-09-23 80 views
-2

我有一个CMS我正在使用的序列化数据库中的数据。我使用unserialize()函数将数据转换为关联数组。现在我有一个很难从关联数组拉动形象价值:我怎样才能得到在这个关联数组中的键值

这是一个简单的while循环,我通过行使用循环:

while($row = mysql_fetch_assoc($query_models)){ 

    $model_name = $row['ModelName']; 
    $model_thumbnail = unserialize($row['info']); 

} 

这是键和值阵列的我需要得到的值,所以可正确缩略图图像分配给尊重人:

[“1x_filename”] =>串(19)“00/83/83-设置-1X。 jpg“

整个阵列在下面,我的目标锁定位置在更多om此阵列:

array(1) { 
    ["thumbs"]=> array(2) { 
     [16]=> array(17) { 
      ["id"]=> string(2) "82" 
      ["1x_width"]=> string(3) "220" 
      ["1x_height"]=> string(3) "330" 
      ["2x_width"]=> string(3) "440" 
      ["2x_height"]=> string(3) "660" 
      ["3x_width"]=> string(3) "660" 
      ["3x_height"]=> string(3) "990" 
      ["4x_width"]=> string(3) "880" 
      ["4x_height"]=> string(4) "1320" 
      ["width"]=> string(3) "220" 
      ["height"]=> string(3) "330" 
      ["retinamode"]=> string(1) "1" 
      ["filename"]=> string(10) "82-set.jpg" 
      ["1x_filename"]=> string(19) "00/82/82-set-1x.jpg" 
      ["2x_filename"]=> string(19) "00/82/82-set-2x.jpg" 
      ["3x_filename"]=> string(19) "00/82/82-set-3x.jpg" 
      ["4x_filename"]=> string(19) "00/82/82-set-4x.jpg" 
     } 
     [17]=> array(17) { 
      ["id"]=> string(2) "83" 
      ["1x_width"]=> string(3) "106" 
      ["1x_height"]=> string(3) "150" 
      ["2x_width"]=> string(3) "212" 
      ["2x_height"]=> string(3) "300" 
      ["3x_width"]=> string(3) "318" 
      ["3x_height"]=> string(3) "450" 
      ["4x_width"]=> string(3) "424" 
      ["4x_height"]=> string(3) "600" 
      ["width"]=> string(3) "106" 
      ["height"]=> string(3) "150" 
      ["retinamode"]=> string(1) "1" 
      ["filename"]=> string(10) "83-set.jpg" 
      ["1x_filename"]=> string(19) "00/83/83-set-1x.jpg" 
      ["2x_filename"]=> string(19) "00/83/83-set-2x.jpg" 
      ["3x_filename"]=> string(19) "00/83/83-set-3x.jpg" 
      ["4x_filename"]=> string(19) "00/83/83-set-4x.jpg" 
     } 
    } 
} 

任何帮助将不胜感激。谢谢!

+1

其添加为像这样的代码很难看到任何东西 –

+0

按钮可以通过用四个空格缩进来自动格式化这样的东西。 – tadman

+0

**警告**:如果您只是在学习PHP,请不要学习过时的['mysql_query'](http://php.net/manual/en/function.mysql-query.php)界面。这很糟糕,并且已经在PHP 7中被删除了。像[PDO不是很难学的东西](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-php-pdo- for-database-access /)以及[PHP The Right Way](http://www.phptherightway.com/)等指南有助于解释最佳实践。确保**你的用户参数[妥善转义](http://bobby-tables.com/php),否则你将以严重的[SQL注入漏洞](http://bobby-tables.com/ )。 – tadman

回答

0

就像这样:

$model_thumbnail = unserialize($row['info']); 
$picturePath = $model_thumbnail['thumbs'][17]['1x_filename']; 

picturePath将包含图片的路径

+0

你钉了兄弟,谢谢! 17从哪里来? – SuperKenCodes

+0

@SuperKenCodes 17位于阵列中。很难说它是什么。我假设它是某种用户ID或可能为您的数据声明一个版本。你的数组在你的情况下有16和17,其余的数据保存在下面。 – natheriel

0

我会建议你使用的mysqli或在PHP中的其他数据库适配器,因为mysql_功能depricated甚至永远不会被删除PHP版本。但根据你的代码,你可以简单地使用foreach循环来获取你的数据。

你的结果给出了某种数据组,我假设这些是用户id或类似的东西。它也可能是版本或类似的东西。由于我不知道这里有两种可能的方式

获取所有:

while($row = mysql_fetch_assoc($query_models)){ 

    $model_name = $row['ModelName']; 
    $model_thumbnail = unserialize($row['info']); 
    // echo all 1x_filename values from all given "ids" 
    foreach ($model_thumbnail['thumbs'] as $model_id => $model_values) { 
     print $model_values['1x_filename']; 
    } 

} 

仅获得最新的ID,如果那些是某种版本的:

while($row = mysql_fetch_assoc($query_models)){ 

    $model_name = $row['ModelName']; 
    $model_thumbnail = unserialize($row['info']); 

    // sort array, so highest ID (assume-ably the newest) 
    krsort($model_thumbnail['thumbs']); 

    // get array entry 
    $firstEntry = reset($model_thumbnail['thumbs']); 
    print $firstEntry['1x_filename']; 

} 
相关问题