2

次のPHPを使用して、jsonサブアレイ構造(CSVから)を構築しています:

$tracks = array();
foreach ($result['tracks'] as $trackdata) {
    $songId    = $trackdata['songId'];
    $title     = $trackdata['title'];
    $ISRC      = $trackdata['ISRC'];
    $name1     = $trackdata['artists:name[1]'];
    $name2     = $trackdata['artists:name[2]'];
    $main1     = $trackdata['artists:main[1]'];
    $main2     = $trackdata['artists:main[2]'];

    $tracks['tracks'][] = array(
        'songId' => $songId,
        'title' => $title,
        'ISRC' => $ISRC,
        'artists' => array(
            0 => array(
                'name' => $name1,
                'main' => (boolean) $main1
            ),
            1 => array(
                'name' => $name2,
                'main' => (boolean) $main2
            )
        )
    );
}

現在、CSV に空の値が含まれている場合、json は (正しく) 値を NULL として表示します。

値が空/空白の場合、特定のオブジェクトがjsonの一部にならないようにするには、PHPに何を追加する必要がありますか?

CSV データに 2 番目のアーティストが存在しない場合、artists:name[2]artist:main[2]を印刷しないように特に考えています。

CSV コードの例を次に示します。

"trk-04","track 4","USAM18490006","John Smith",true,,

if (empty...) を調査 (および実装を試みました) しましたが、このコードのどこに来るのかわかりません。

どんな指針も素晴らしいでしょう。

前もって感謝します!

4

5 に答える 5

2

後で json エンコードする中間配列に 2 番目のアーティストを追加することは避けたいと思うでしょう。

$tracks = array();
foreach ($result['tracks'] as $trackdata) {
    $songId    = $trackdata['songId'];
    $title     = $trackdata['title'];
    $ISRC      = $trackdata['ISRC'];
    $name1     = $trackdata['artists:name[1]'];
    $name2     = $trackdata['artists:name[2]'];
    $main1     = $trackdata['artists:main[1]'];
    $main2     = $trackdata['artists:main[2]'];

    $artists = array();
    // First artist always exists
    $artists[] = array('name' => $name1, 'main' => (boolean) $main1);
    // Add second artist only if one exists with a non-null name
    if(!is_null($name2)) {
      $artists[] = array('name' => $name2, 'main' => (boolean) $main2);
    }

    $tracks['tracks'][] = array(
        'songId' => $songId,
        'title' => $title,
        'ISRC' => $ISRC,
        'artists' => $artists
    );
}

empty必要に応じて代わりに関数を使用できますis_null。空の文字列や数字の 0 などの名前は存在しないと見なされます。 is_null厳密に === null のもののみをキャッチします。

于 2013-05-27T21:26:24.600 に答える
1
$artists[0] = array(
            'name' => $name1,
            'main' => (boolean) $main1
        );
if (!empty($name2)&&!empty($main2))
    $artists[1] = array(
            'name' => $name2,
            'main' => (boolean) $main2
        );
$tracks['tracks'][] = array(
    'songId' => $songId,
    'title' => $title,
    'ISRC' => $ISRC,
    'artists' => $artists
);
于 2013-05-27T21:26:55.853 に答える
0

array_filter を使用して、未設定の日付を配列から除外します

 // assuming $artist is an array you want to scrub

 $artist = array_filter($artist);
 $track["artists"][] = $artist;
于 2013-05-27T21:25:03.630 に答える