【问题标题】:Array with different Key => Value pairs into a table PHP将具有不同键 => 值对的数组放入表 PHP
【发布时间】:2013-01-22 16:42:02
【问题描述】:

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

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 个用户没有“程序”数组键/值,但我希望有一列说“程序”,但对于在他们的数组中没有这个的用户来说,它是空的。

希望这是有道理的。

【问题讨论】:

  • 您需要过度补偿您的数据库以存储不总是使用的额外列,或者使用 NoSQL 提供更灵活的存储机制来存储具有广泛属性的用户

标签: php arrays multidimensional-array


【解决方案1】:

这可以通过将所有这些数组合并到一个数组中来实现。循环遍历数组中的每个项目,收集键(in_array 可能会有所帮助)。循环遍历您的键数组以打印出表中的所有列标题,然后当您的脚本需要输出数组时,您可以简单地在每个人上循环运行,在每个属性映射到列时循环遍历每个属性。这有点抽象,但我认为你可以填写其余部分。祝你好运!

【讨论】:

  • 是的,我一直在寻找和思考类似的事情,通过在打印出标题后循环并说“如果这个数组键等于标题,那么添加值”之类的事情?我去试试,谢谢!
  • 如果您遇到困难或需要更多细节,请告诉我。我认为你将不得不有一个初始循环,在那里你拔出你的钥匙。我看不出有什么办法。
【解决方案2】:

您可以列出要包含在表中的列,然后为每个用户使用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>';
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2020-02-17
      • 2013-09-26
      • 2016-06-09
      相关资源
      最近更新 更多