2015-01-02 8 views
0

Я попытался отобразить изображение из массива, но это не сработало.Как вывести часть многомерного массива?

$productArr = [ 
    "PT" => [ 
     "cat" => [ "image" => "cat.jpg", "desc" => "blah blah"], 
     "fish"=> [ "image" => "fish.jpg", "desc" => "blah blah"], 
     "dog" => [ "image" => "dog.jpg","desc" => "blah blah"], 
    ], 
    "KC" => [ 
     "Ice" => [ "image" => "ice.jpg", "desc" => "mah mah mah"], 
     "cold"=> [ "image" => "cold.jpg", "desc" => "mah mah mah"], 
     "water"=> [ "image" => "water.jpg", "desc" => "mah mah mah"], 
    ], 

]; 

$featuredArr = [ 
    "KC" => "Ice", 
    "PT" => "cat", 
]; 

foreach ($featuredArr as $key => $value) { 
    if ($productArr[$key][$value]) { 
     echo "key $key=>$value exists: <br />"; 
     foreach ($productArr[$key][$value] as $newKey => $newValue) { 
     echo "$newKey['image']<br />"; 
     } 
    } 
} 

Я также хочу, чтобы это звучало как «KC», так и «PT» из $ featuredArr. в настоящее время выводится только «Cat».

+0

У вас есть ошибка синтаксиса. 'echo '$ newKey [' image ']
"; 'должно быть' echo' {$ newKey ['image']}
";'. Как он работает вообще? – Barmar

+0

Illegal string offset 'image' – Jun

+0

Это потому, что '$ newKey' - это строка, а не массив. – Barmar

ответ

0

Внутренняя петля foreach не имеет значения и делает странные вещи. Попробуйте выполнить это, кажется, работает:

$productArr = [ 
    "PT" => [ 
     "cat" => [ "image" => "cat.jpg", "desc" => "blah blah"], 
     "fish"=> [ "image" => "fish.jpg", "desc" => "blah blah"], 
     "dog" => [ "image" => "dog.jpg","desc" => "blah blah"], 
    ], 
    "KC" => [ 
     "Ice" => [ "image" => "ice.jpg", "desc" => "mah mah mah" ], 
     "cold"=> [ "image" => "cold.jpg", "desc" => "mah mah mah" ], 
     "water"=> [ "image" => "water.jpg", "desc" => "mah mah mah" ], 
    ], 

]; 

$featuredArr = [ 
    "KC" => "Ice", 
    "PT" => "cat", 
]; 

foreach ($featuredArr as $key => $value) { 
    if ($productArr[$key][$value]) { 
     echo "key $key=>$value exists: <br />"; 
     echo $productArr[$key][$value]['image'] . '<br />'; 
    } 
} 

Вы можете быстро проверить вещи, как это с помощью PHP Repl сайт, как этот:

http://phpepl.herokuapp.com/

+0

в моей системе, он только создал ключ PT => cat существует: cat.jpg – Jun

+0

Звучит как проблема в вашей системе, тогда у вас есть все сообщения об ошибках? Возможно, есть какая-то проблема, которую ваша система подавляет. Он работает, когда вы запускаете этот код на REPL, который я связал? – Erik

+0

Я нашел причину, почему у меня не может быть того же ключевого значения в моей $ featuredArr – Jun

1

$ productArr [$ ключ] [$ значение] уже 1-D массив а, для KC => Ice она имеет значение:

[ "image" => "ice.jpg", "desc" => "mah mah mah"] 

Вы должны просто выход

echo $productArr[$key][$value]['image'], "<br />"; 

Кроме того, вы должны использовать Исеть() или пустой(), чтобы проверить, существует ли элемент, такие как:

if (isset($productArr[$key]) && isset($productArr[$key][$value])) 

это предотвращает неопределенные ошибки индекса.

0

Не совсем на ваш вопрос, но я думаю, мой слайдер пример может помочь вам, пожалуйста, держать несколько изображение с именем image1.jpg Image2.jpg .... в той же папке

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 

<style> 
#cycler{position:relative;} 
#cycler img{position:absolute;z-index:1} 
#cycler img.active{z-index:3} 
</style> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

<script> 

function cycleImages(){ 
     var $active = $('#cycler .active'); 
     var $next = ($active.next().length > 0) ? $active.next() : $('#cycler img:first'); 
     $next.css('z-index',2);//move the next image up the pile 
     $active.fadeOut(1500,function(){//fade out the top image 
     $active.css('z-index',1).show().removeClass('active');//reset the z-index and unhide the image 
      $next.css('z-index',3).addClass('active');//make the next image the top one 
     }); 
    } 

$(document).ready(function(){ 
// run every 7s 
setInterval('cycleImages()', 2000); 
}) 

</script> 


</head> 

<body> 

<div id="cycler"> 
<img class="active" src="image1.jpg" alt="My image" /> 
<img src="image2.jpg" alt="My image" /> 
<img src="image3.jpg" alt="My image" /> 
<img src="image4.jpg" alt="My image" />  
</div> 

</body> 
</html> 


</html> 
0

Вы вторя неправильную вещь во внутреннем foreach петля. Вы должны повторять ключ и значение, но вы индексируете ключ.

foreach ($featuredArr as $key => $value) { 
    if ($productArr[$key][$value]) { 
     echo "key $key=>$value exists: <br />\n"; 
     foreach ($productArr[$key][$value] as $newKey => $newValue) { 
     echo "$newKey => $newValue<br />\n"; 
     } 
    } 
} 

DEMO