2017-09-23 11 views
-2

データベース内のデータをシリアル化するCMSを使用しています。 unserialize()関数を使用してデータを連想配列に変換しました。今私は連想配列から画像の値を引っ張って苦労しています:私は、行をループに使用していますwhileループこの連想配列のキーの値を取得するにはどうすればいいですか

これは単純です:

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

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

} 

これはキーと値であります配列の値を取得する必要があるので、尊敬する人物に正しいサムネイル画像を割り当てることができます:

["1x_filename"] => string(19) "00/83/83-set-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

のようにそれを追加します。これらは、バージョン管理のいくつかの種類のためのものである場合には

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を取得し、このようなコードは何も見るのが非常に難しいです。 –

+0

'{}'ボタンは、4つのスペースでインデントすることで、このようなものを自動的にフォーマットすることができます。 – 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-phps-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

mysql_関数は廃止予定としても、決してで削除されているように私には、mysqliのやPHPで他のデータベース・アダプタを使用することをお勧めいたしますでしょうPHPのバージョン。しかし、あなたのコードによれば、単にforeachループを使ってデータを得ることができます。

結果には何らかのデータグループが返されますが、ユーザーIDやそれに類するものがあると想定しています。それはまた、バージョンのようなものかもしれません。私はここで2つの方法

があることを知っていないので、すべての取得:

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']; 

} 
関連する問題