第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數(shù)據(jù)庫中的信息添加到現(xiàn)有的對象數(shù)組中?

如何將數(shù)據(jù)庫中的信息添加到現(xiàn)有的對象數(shù)組中?

PHP
紫衣仙女 2022-10-22 16:43:45
我有一個以下格式的數(shù)組;// echo '<pre>' . var_export($this->viewableFields, true) . '</pre>';array (  0 =>   (object) array(     'formId' => '4',     'userId' => '7'  ),  1 =>   (object) array(     'formId' => '4',     'userId' => '4'  )) 我需要修改數(shù)據(jù)并向該數(shù)組添加另一個鍵/值。我需要使用userId數(shù)組中的值,查詢 MySQL 數(shù)據(jù)庫并返回值。我需要為每個數(shù)組元素執(zhí)行此操作。因此,對于每個數(shù)組元素,我想運行一個查詢,例如;SELECT group from users WHERE userId = [userId in array]然后我想將此值添加到數(shù)組中,最終數(shù)組應如下所示;array (  0 =>   (object) array(     'formId' => '4',     'userId' => '7',     'group' => 'Registered'  ),  1 =>   (object) array(     'formId' => '4',     'userId' => '4',     'group' => 'Admin'  )) 我知道我可以通過使用向數(shù)組元素添加一個附加值array_walk,就像這樣;array_walk($this->viewableFields, function(&$arr) {    $arr->group = 'Registered';});我不確定如何從數(shù)據(jù)庫中檢索值并插入到現(xiàn)有數(shù)組中。我怎樣才能做到這一點?
查看完整描述

3 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

對每條記錄進行一次額外查詢是一個非常糟糕的主意,并且是N+1 問題的一個明顯示例:您需要獲取實體的“N”個子實體,并且最初只獲取父實體。


如果您的初始查詢有 100 個用戶,那么您將完成 101 個查詢。如果您以后需要一些其他不相關(guān)的領(lǐng)域,這將開始迅速失控。


這對性能非常不利,并且隨著您的應用程序變得越來越復雜,它很容易對其產(chǎn)生非常嚴重的影響。


假設(shè)您無法修改初始查詢并進行簡單JOIN查詢以獲取所需數(shù)據(jù),最好簡單地進行兩次查詢并拼接結(jié)果數(shù)據(jù)。即使您可以修改原始查詢,這最終可能會表現(xiàn)得更好。


如何去做:

假設(shè)您的初始對象數(shù)組具有 aformId和userId公共屬性,首先獲取您感興趣的所有用戶 ID:


$index = [];

$ids = array_reduce($array, function($ids, $object) use (&$index) {

    $ids[]                  = $object->userId;

    $index[$object->userId] = $object;


    return $ids;

});


$ids_for_sql = '(' . implode(', ', $ids) . ')';

您還正在構(gòu)建一個“索引”( $index),以便能夠直接訪問數(shù)組中的對象,而無需再次對其進行迭代。


現(xiàn)在您可以進行第二個查詢來獲取您的“組”屬性:


$groups_query = "SELECT userId, group from users WHERE userId IN $ids_for_sql";

現(xiàn)在只需“拼接”來自兩個查詢的數(shù)據(jù)即可:


foreach ($conn->query($groups_query) as $row) {

    $index[$row['userId']]->group = $row['group'];

}

有了這個,現(xiàn)在您的原始$array包含“用戶”對象將被正確更新,并且只進行 2 次查詢而不是 11 次。這可以更好地執(zhí)行和擴展,并且不會增加顯著的復雜性。


您可以在這里看到一個簡單的、有效的演示(使用數(shù)組而不是 SQL 查詢)。


查看完整回答
反對 回復 2022-10-22
?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

首先,我們將從對象數(shù)組中獲取 userID 的值,然后在數(shù)據(jù)庫中查詢它,假設(shè)數(shù)組為 $arr。


foreach($arr AS $key=>$item) 

{

    $userid=$item["userId"];  // getting userId from object

    $query= $con->query("SELECT group from users WHERE userId='$userid'");

    if($query->num_rows>0)  //checking if query has some result

    {

        $row=$result->fetch_assoc();      //fetching the result

        $arr[$key]->group=$row['group'];  // lastly attaching group key to the arr.

    }

}


查看完整回答
反對 回復 2022-10-22
?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

您必須查找項目,從數(shù)組項目中獲取 ID,然后使用 SQL 選擇數(shù)據(jù)。


嘗試:


foreach($array as $key=>$item) {

    $sql = "SELECT group from users WHERE userId = ".$item["userId"];

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {

        $db_data = $result->fetch_assoc();

        //do stuff with db data


        $array[$key]["group"] = $group; //insert group to this variable

    }

}


查看完整回答
反對 回復 2022-10-22
  • 3 回答
  • 0 關(guān)注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號