0

php implode を使用して、php 配列を html に変換しようとしています。

これは私のコードです:

$myarray = array(); 
while ($row = mysql_fetch_assoc($result)) { 
$myarray[] = array("title"=>$row['title'], 
       "name"=>$row['title'], 
       "content"=>$row['content'],
       "image" => 
           array(
             "cls"=>"slide-image",
             "_src"=>$row['src'],
             "source"=>$row['source']                
             )   
       );
}

$rows = array_fill( 0, count( $myarray[0] ), "" );
$keys = array_keys( $myarray[0] );
foreach( $myarray as $k => $record )
    for( $i=0, $max=count( $rows ); $i < $max; $i++ )
        $rows[ $i ] .= $record[ $keys[ $i ] ];
print implode( "", $rows );

出力は

title 1, title-2, content for title 1, content for title 2ArrayArray

として欲しい

title 1, content for title 1, title 2, content for title 2

そして、なぜアレイが来るのかわかりません。何か助けてください?

4

4 に答える 4

1

データベースから次のサンプル配列があるとします。

$data = array(
    array(
        'title' => 'Title 1', 
        'name' => 'Title 1', 
        'content' => 'Content 1', 
        'image' => array(
            'src' => 'a', 
            'title' => 'b', 
            'alt' => 'c'
        )
    ), 
    array(
        'title' => 'Title 2', 
        'name' => 'Title 2', 
        'content' => 'Content 2', 
        'image' => array(
            'src' => 'a', 
        )
    )
);

次のコードがループします。

$rows = array();
foreach($data as $row) {
    $img = '<img ';
    foreach($row['image'] as $attr => $value) {
        $img .= $attr . '="' . $value . '" ';
    }
    $img .= '/>'; //Close $img
    $rows[] = $row['title'] . ', ' . $row['content'] . ', ' . $img;
}
print implode(', ', $rows);

生産:

Title 1, Content 1, <img src="a" title="b" alt="c" />, Title 2, Content 2, <img src="a" />

アップデート

データベースからデータをプルしているときにこれを行うことができます。

$rows = array();
while($row = mysql_fetch_assoc($result)) {
    $img = '<img class="' . $row['cls'] . '" src="' . $row['src'] . '" title="' . $row['source'] . '" />';
    $rows[] = $row['title'] . ', ' . $row['content'] . ', ' . $img;
}
print implode(', ', $rows);
于 2012-12-04T18:05:57.557 に答える
0

配列を文字列として表現しようとすると、 string が生成されますArray。あなたの場合、それは 2 つの $record['image'] フィールドです。これを追加してみてください

$rows = array_fill( 0, count( $myarray[0] ), "" );
$keys = array_keys( $myarray[0] );
foreach( $myarray as $k => $record )
    for( $i=0, $max=count( $rows ); $i < $max; $i++ ){
        if (is_array($record[$keys[$i]])){
            $rows[$i].=implode("",$record[$keys[$i]]);
        }
        else $rows[ $i ] .= $record[ $keys[ $i ] ];
    }
print implode( "", $rows );

サブ配列の特定の処理をより複雑にすることもできますが、それは一例です。

于 2012-12-04T17:36:30.973 に答える
0

DB からこれらの結果を取得していると仮定して、私はこの解決策を提供します:

$myData = array();

while ($row = mysql_fetch_array($result)) {
    $myData[]['title']  = "<h2>".$row['title']."</h2>";
    $myData[]['content']    = "<p>".$row['content']."</p>";
    $myData[]['imageData']  = array("<img src='".$row['src']."' class='slide-image' />",$row['source']);
}

ここから、foreach ループを使用して $myData を反復処理できます。

于 2012-12-04T17:37:54.953 に答える
0

画像も欲しいというOPのコメントのために更新します。

既に示した例を少し調整して、画像を取得することもできます。$myarrayデータベースから値を入力した直後に、このコードを配置するだけです。また、HTML タグを追加して、例をよりわかりやすくしました。

$html = '';
foreach($myarray as $record){
    if($html)
        $html .= '<hr/>';
    $html .= '<h1>' . $record['title'] . '</h1>';
    $html .= '<p>' . $record['content'] . '</p>';

    $image = $record['image'];
    $html .= '<img class="' . $image['cls'] . '" src="' . $image['_src'] . '" title="' . $image['source'] . '"/>';
}
于 2012-12-04T17:37:58.223 に答える