2016-04-18 13 views
0

私は、セッションとページURLの行を持つテーブルを取って、セッションを含む各行と訪問されたすべてのページが '|'で区切られたテーブルに入れようとしています。PHP implodeが動作しません

以下のコードは、URLが隣にないセッションのみを返します。私がここで間違っていたことに関するアイデアは?

<?php 
$html = "<table>\n"; 
$html .= "<tr>\n<th>SESSION</th>\n<th>PATH</th>\n</tr>\n"; 
$paths = array(); 
$sql = "SELECT session_id, page_url FROM pageviews"; 
$result = mysqli_query($conn, $sql); 
$got_rows = mysqli_num_rows($result); 

if ($got_rows) { 
    while ($row = mysqli_fetch_array($result)) { 
     array_push($paths[$row['session_id']], $row['page_url']); 
    } 

    foreach ($paths as $session => $page) { 
     $html .= "<tr>\n"; 
     $html .= '<td>' . $session . "</td>\n"; 
     $html .= '<td>' . implode('| ', $page) . "</td>\n"; 
     $html .= "</tr>\n"; 
    } 

} else { 
    $html .= '<td colspan="2">No results</td>' . "\n"; 
} 

$html .= "</table>\n"; 
echo $html; 

if (!mysqli_query($conn,$sql)) { 
    die('Error: ' . mysqli_error($conn)); 
} 

mysqli_close($conn); 
?> 
+0

NULLが与えられますが、テーブルにはエントリがいっぱいです – Topher

+0

コードが変更されて、現在空白の画面が表示されているようです。初期にinitをインクルードする呼び出しがあり、うまく動作します。 – Topher

+0

あなたの問題を修正しました。私は今、これが実現する何 アレイ ( [f637f5a85f8c911f596e2cfe775a1f16] => leadfactory.ca/analytics/testpage2.php [74e1ad9b538632afce44fd732f318a79] => leadfactory.ca/analytics/testpage2.php ) :だから私はこれを取得します一意のセッションだけを返し、すべてのページで複数のセッションを1回以上リストしないことです。 – Topher

答えて

1

エラー報告をオンにした場合、あなたはarray_push()のエラーメッセージを受け取る必要があります。

警告:array_push()がnull

を参照してください与えられ、パラメータ1が配列であることを期待:3v4l.org example of error

この例では、配列を次のように定義しています。

$paths = array(); 

しかし、あなたのwhile()であなたは存在しない配列に新しいアイテムを追加しよう:このような

array_push($paths[$row['session_id']], $row['page_url']); 
// $paths[$row['session_id']] hasn't been defined as an array, which array_push() expects 

何かがあなたの問題を解決する必要があります。

while ($row = mysqli_fetch_array($result)) { 

    // Create an array for the session_id if it doesn't exist yet 
    if (! array_key_exists($row['session_id'], $paths) || ! is_array($paths[$row['session_id']])) { 
     $paths[$row['session_id']] = []; 
    } 

    // Add to the array now that we know it exists 
    array_push($paths[$row['session_id']], $row['page_url']); 
} 

参照してください。3v4l.org working example

脇の下として、array_push($arr, $var)を削除してそのまま$arr[] = $varの方が速い。

注:PHP docsからあなたは配列に一つの要素を追加するためにarray_push()を使用する場合、それはそのように関数を呼び出すのオーバーヘッドがないため$array[] =を使用することをお勧めします。

+0

うわー。ばっちり成功。ありがとうございました!!!!!! – Topher

+0

@Topher心配はいりません。 :) –

関連する問題