具有不同键的数组=>;将值对放入一个PHP表中

具有不同键的数组=>;将值对放入一个PHP表中,php,arrays,multidimensional-array,Php,Arrays,Multidimensional 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 ( [u

我生成了一个“主”数组,看起来有点像这样:

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

我的问题是,我希望创建一个表来保存所有这些数据,每一行代表一个用户,但数组键可能略有不同。例如,前两个用户没有“Program”数组键/值,但我希望有一列显示“Program”,但对于数组中没有该键/值的用户,该列为空


希望这是有道理的

这可以通过将所有这些数组合并到单个数组中来实现。循环遍历数组中的每个项,收集密钥(在数组中可能会有所帮助)。循环通过keys数组打印出表中的所有列标题,然后当脚本需要输出数组时,只需在每个人身上循环运行,在映射到列时循环通过每个属性。这有点抽象,但我想你可以把剩下的补上。祝你好运

这可以通过将所有这些数组合并到单个数组中来实现。循环遍历数组中的每个项,收集密钥(在数组中可能会有所帮助)。循环通过keys数组打印出表中的所有列标题,然后当脚本需要输出数组时,只需在每个人身上循环运行,在映射到列时循环通过每个属性。这有点抽象,但我想你可以把剩下的补上。祝你好运

您可以列出要包含在表中的列,然后对于每个用户,使用检查每列是否有值:

$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>';
}
$columnNames=array('userID','email','name','stream','program');
foreach($users作为$user){
回声';
foreach($columnNames作为$columnName){
回声';
if(isset($user[$columnName])){
echo htmlspecialchars($user[$columnName]);
}
回声';
}
回声';
}

您可以列出要包含在表中的列,然后对于每个用户,使用检查每列是否有值:

$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>';
}
$columnNames=array('userID','email','name','stream','program');
foreach($users作为$user){
回声';
foreach($columnNames作为$columnName){
回声';
if(isset($user[$columnName])){
echo htmlspecialchars($user[$columnName]);
}
回声';
}
回声';
}

如果我没有弄错您的问题,通过这样做,您可以使用最大数组键创建新数组

$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 ) 

如果我没有弄错你的问题,通过这样做,你可以用最大数组键创建新数组

$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 ) 

您需要过度补偿数据库以存储不总是使用的其他列,或者使用NoSQL提供更灵活的存储机制以存储具有广泛属性的用户您需要过度补偿数据库以存储不总是使用的其他列,或者使用NoSQL提供一种更灵活的存储机制来存储具有广泛属性的用户是的,我刚才也在寻找和思考类似的东西,在打印出标题后循环,然后说“如果这个数组键等于标题,那么添加值”之类的话?我要试一试,谢谢!如果您遇到困难或需要更多细节,请告诉我。我想你必须有一个最初的循环,在那里你可以拔出你的钥匙。我看不出有什么办法可以解决这个问题。是的,我只是在寻找和思考类似的东西,在打印出标题后循环,然后说“如果这个数组键等于标题,那么添加值”之类的东西?我要试一试,谢谢!如果您遇到困难或需要更多细节,请告诉我。我想你必须有一个最初的循环,在那里你可以拔出你的钥匙。我看不出有什么办法可以解决这个问题。