【问题标题】:PDO Compare two Arrays with different formatsPDO 比较两个不同格式的数组
【发布时间】:2017-04-30 08:35:05
【问题描述】:

我有两个数组:
已通过表单填充的 $teachArray。
$learnArray 是 PDO Select 查询的结果。

我想使用 array_diff() 函数将 $teachArray 与 $learnArray 进行比较,以便将新数据插入到我的数据库中。

我不知道如何正确地将 $learnArray 转换为与 $teachArray 相同的格式。

当我 print_r($teachArray) 我得到结果: Array ( [0] => 1 [1] => 2 )
当我 print_r($learnArray) 时,我得到结果: Array ( [0] => Array ( [language_id] => 1 ) [1] => Array ( [language_id] => 2 ))

if(isset($_POST['teach']))
        {
            $teachArray = $_POST['teach'];

            $sqlGet = "SELECT language_id FROM language_skill WHERE person_id = :person_id AND language_learning = :language_learning";
            $query = $handler->prepare($sqlGet);
            $query->bindValue(':person_id', $_SESSION['person_id']);
            $query->bindValue(':language_learning', 1);
            $query->execute();
            $number_of_rows = $query->rowCount();
            $learnArray = $query->fetchAll(PDO::FETCH_ASSOC); **// How do I correctly fetch it.**

            $sqlInsertTeach = "INSERT INTO language_skill (person_id, language_id, language_learning, language_teaching)
                               VALUES(:person_id, :language_id, :language_learning, :language_teaching)";

            if ($number_of_rows > 0) {
                $differentLanguageChosen = array_diff($teachArray, $learnArray);
                foreach ($differentLanguageChosen as $dataTeach) {
                    $query = $handler->prepare($sqlInsertTeach);
                    $query->bindValue(':person_id', $_SESSION['person_id']);
                    $query->bindValue(':language_id', $dataTeach);
                    $query->bindValue(':language_learning', 0);
                    $query->bindValue(':language_teaching', 1);
                    $query->execute();
                }
            }
        }

【问题讨论】:

    标签: php mysql arrays pdo


    【解决方案1】:

    替换

    $learnArray = $query->fetchAll(PDO::FETCH_ASSOC);
    

    $learnArray = [];
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        $learnArray[] = $row['language_id'];
    }
    

    甚至更简单:

    $learnArray = $query->fetchAll(PDO::FETCH_COLUMN, 0);
    

    其中0 是您要获取的列的索引。因为您只有 language_id 列 - 它的索引是 0。

    【讨论】:

    • 谢谢,真的很有帮助
    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多