1
<?php
$json = "http://pastebin.com/raw.php?i=e1Sw66C3";
$data = json_decode(file_get_contents($json), true);

$data = $data['recenttracks'];
$tracks=$data['track'];

 foreach ($tracks as $track) {
    $artist = $track['artist']['#text'];
    $title = $track['name'];
    $url = $track['url'];
    $image = array_reduce($track['image'], function ($image, array $i) { return $image ?: ($i['size'] == 'large' ? $i['#text'] : null); });
echo '<li><a rel="external nofollow" href="'.htmlentities($url, ENT_QUOTES, "UTF-8").'" title="', $title, '">', $artist, ' - ', $title, '</a></li>'; }
echo ($image);
?>

このスニペットは常に機能しています。BOOM がecho ($image);何も出力しない理由がわかりません。その関数の何が問題なのかわかりません。コードの残りの部分は正常に動作します (入力から取得したその他の情報)。のリンクにアクセスすると、入力を確認できますfile_get_contents

4

1 に答える 1

0

コメントで書いたように、以前は、要素を持つ要素size = 'large'が最後の要素だったためにのみコードが機能していました。そうでない場合、変数$imageはループごとに上書きされます。必要なのはこのようなものです

$json = "http://pastebin.com/raw.php?i=e1Sw66C3";
$data = json_decode(file_get_contents($json), true);

$data = $data['recenttracks'];
$tracks=$data['track'];
$images = array();

 foreach ($tracks as $track) {
    $artist = $track['artist']['#text'];
    $title = $track['name'];
    $url = $track['url'];
    if (isset($track['image']) && is_array($track['image']))
       foreach($track['image'] as $image)
          if (isset($image['size']) && $image['size'] == 'large' &&
              isset($image['#text']) && !empty($image['#text']))
             $images[] = $image['#text'];

    echo '<li><a rel="external nofollow" href="' . 
          htmlentities($url, ENT_QUOTES, "UTF-8") . '" title="', $title, '">',
          $artist, ' - ', $title, '</a></li>'; 
}
echo join("\n", $images);
于 2014-11-06T02:51:36.110 に答える