2013-05-14 20 views
0

我有問題通過Codeigniter/MySQL從圖像數組中提取值。所以我有一個名爲表在我的數據庫「形象」,如果我同意了它,我得到了下面的代碼:從Codeigniter中的數組中提取圖像值

{"f01efdf6fe3b2bb387d3094aa701203f":{"filename":"f01efdf6fe3b2bb387d3094aa701203f.jpg","alt":"","caption":"","primary":true},"b11581adadd1848acb2898e7a284afc1":{"filename":"b11581adadd1848acb2898e7a284afc1.png","alt":"","caption":""},"2cfee6d3c334696833b1cfe13910fcf1":{"filename":"2cfee6d3c334696833b1cfe13910fcf1.png","alt":"","caption":""}} 

正如你可以看到有3張圖片在那裏,我需要的是呼應了剛圖像,其中 「初級」 值是:foreach循環內真...

編輯:

<?php 
$query = $this->db->query("SELECT * FROM offers_products WHERE offer_large LIMIT 5;"); 
?> 

<?php foreach ($query->result() as $row): ?> 

<li><a href="/<?=$row->slug?>"><?=$row->id?></a></li> 
<li><?=$row->name?></li> 
<li><!-- THIS IS THE IMAGES TABLE VALUE --> <?=$row->images?> <!-- --></li> 
<li><?=$row->description?></li> 

<?php endforeach; ?> 

回答

1

可能:

$array = json_decode($stringFromDatabase, true); 
$primary = false; 
foreach ($array as $longStringDontCare => $imageArray) { 
    if (!empty($imageArray['primary'])) { 
     $primary = $imageArray; 
     break; 
    } 
} 
if ($primary) { 
    echo $primary['filename'];// should give: f01efdf6fe3b2bb387d3094aa701203f.jpg 
} 

給你最後一個提示:

<?php 
function getPrimaryImageFromJsonString($stringFromDatabase) { 
    $array = json_decode($stringFromDatabase, true); 
    $primary = false; 
    foreach ($array as $longStringDontCare => $imageArray) { 
     if (!empty($imageArray['primary'])) { 
      $primary = $imageArray; 
      break; 
     } 
    } 
    if ($primary) { 
     return $primary['filename']; 
    } 
    return null; 
} 
?> 


<?php foreach ($query->result() as $row): ?> 

<li><a href="/<?=$row->slug?>"><?=$row->id?></a></li> 
<li><?=$row->name?></li> 
<li><?php echo getPrimaryImageFromJsonString($row->images);?></li> 
<li><?=$row->description?></li> 

<?php endforeach; ?> 

L.E:幾個編輯。

+0

我編輯上面我的問題,因爲我有一個foreach循環不已,任何IDE一個 ? ;) – 2013-05-14 09:23:20

+0

您將需要第二個使用'json_encode'函數將json字符串解析爲數組。你可以嵌套'foreach'循環。 – Twisted1919 2013-05-14 09:25:30

+0

我明白,感謝您的幫助,我非常感謝。但是,我還在掙扎,因爲「$ stringFromDatabase」實際上在我使用的「foreach循環內」圖像?>「我添加了上面的完整代碼,如果你可以再給我一個例子來處理。這將非常感激,因爲我從來沒有做過這個之前;)...謝謝你! – 2013-05-14 09:40:29

1

你必須首先解碼JSON編碼字符串,並提取從那裏第一次像:

這裏是你可以用它來提取原圖像的小功能:(你可以,如果你把這個功能在助手用笨)

function get_primary_image($encode_json_data) 
{ 
    $primary_image = ''; 
    $decoded_json = json_decode($encode_json_data); 
    foreach($decoded_json as $obj) 
    { 
     if(isset($obj->primary) && $obj->primary == 1) 
      $primary_image = $obj->filename; 
    } 
    return $primary_image; 
} 

您可以按以下方式調用上述功能在您的視圖:

<?php foreach ($query->result() as $row): ?> 

<li><a href="/<?=$row->slug?>"><?=$row->id?></a></li> 
<li><?=$row->name?></li> 
<li> <?=get_primary_image($row->images)?></li><!-- Here, you call above function --> 
<li><?=$row->description?></li> 

<?php endforeach; ?> 
+0

我想知道這是如何得到upvote,因爲它沒有考慮數組鍵是一個哈希字符串,它的值是另一個數組的想法。 – Twisted1919 2013-05-14 10:06:34

+0

@ Twisted1919:我測試過上面的代碼,工作正常....我不知道,你想讓我考慮哪些事情?請詳細說明.... – 2013-05-14 10:55:12