0

次のような「マスター」配列を生成しました。

Array ( [userID] => 152 [email] => xxxxx@googlemail.com [name] => Jay jay go go [stream] => 616 ) 
Array ( [userID] => 133 [email] => damxxxxian@indigo.com [name] => Damian T [stream] => 616 ) 
Array ( [userID] => 154 [email] => julie@indigo.com [name] => Julie1000 E [stream] => 615 [PROGRAMME] => Designer ) 
Array ( [userID] => 153 [email] => jay@indigo.com [name] => James1000 G [stream] => 616 [PROGRAMME] => Apple Develpepr ) 

これは、単一の配列を通るループからの出力であるため、これら4つの配列のそれぞれにキー0〜3があります。

私の問題は、このすべてのデータを保持するために作成するテーブルが必要なことです。各行はユーザーを表しますが、配列キーはわずかに異なる場合があります。たとえば、最初の2人のユーザーには「programme」配列のキー/値がありませんが、「programme」という列が必要ですが、配列にこれがないユーザーには空にします。

それが理にかなっていることを願っています。

4

3 に答える 3

2

これは、これらすべてのアレイを1つのアレイにマージすることで実現できます。配列内のすべてのアイテムをループして、キーを収集します(in_arrayが役立つ場合があります)。キー配列をループしてテーブル内のすべての列ヘッダーを出力します。スクリプトで配列を出力する必要がある場合は、列にマップするときに各プロパティをループして、各人をループで実行できます。それは一種の抽象ですが、残りは記入できると思います。幸運を!

于 2013-01-22T16:47:56.590 に答える
1

テーブルに含める列のリストを作成し、ユーザーごとにissetを使用して、各列に値があるかどうかを確認できます。

$columnNames = array('userID', 'email', 'name', 'stream', 'PROGRAMME');

foreach ($users as $user) {
    echo '<tr>';
    foreach ($columnNames as $columnName) {
        echo '<td>';
        if (isset($user[$columnName])) {
            echo htmlspecialchars($user[$columnName]);
        }
        echo '</td>';
    }
    echo '</tr>';
}
于 2013-01-22T16:52:50.597 に答える
1

私があなたの質問を間違えなかった場合、これを行うことで、最大配列キーを使用して新しい配列を作成できます。

$data = array(
    array('userID' => 152, 'email' => 'xxxxx@googlemail.com', 'name' => 'Jay jay go go', 'stream' => 616),
    array('userID' => 133, 'email' => 'damxxxxian@indigo.com', 'name' => 'Damian T', 'stream' => 616),
    array('userID' => 154, 'email' => 'julie@indigo.com', 'name' => 'Julie1000 E', 'stream' => 615, 'PROGRAMME' => 'Designer'),
    array('userID' => 153, 'email' => 'jay@indigo.com', 'name' => 'James1000 G', 'stream' => 616, 'PROGRAMME' => 'Apple Develpepr'),
);
$max_len = null;
$max_arr = null;
// First we find max array to grab its keys
foreach ($data as $i => $a) {
    $len = count($a);
    if ($max_len === null || $len > $max_len) {
        $max_len = $len;
        $max_arr = $data[$i];
    }
}
$max_arr_keys = array_keys($max_arr);
$data_new = array();
foreach ($data as $i => $a) {
    // and using max array keys here
    foreach ($max_arr_keys as $k) {
        // key exists? get value, or set as NULL
        $data_new[$i][$k] = isset($a[$k]) ? $a[$k] : null;
    }
}
print_r($data_new);

そして、出力は次のようになります。

Array ( [userID] => 152 [email] => xxxxx@googlemail.com [name] => Jay jay go go [stream] => 616 [PROGRAMME] => null )
Array ( [userID] => 133 [email] => damxxxxian@indigo.com [name] => Damian T [stream] => 616 [PROGRAMME] => null ) 
Array ( [userID] => 154 [email] => julie@indigo.com [name] => Julie1000 E [stream] => 615 [PROGRAMME] => Designer ) 
Array ( [userID] => 153 [email] => jay@indigo.com [name] => James1000 G [stream] => 616 [PROGRAMME] => Apple Develpepr ) 
于 2013-01-22T17:23:05.513 に答える