簡體   English   中英

如果找到鍵,則刪除數組對象

[英]Removing an Array Object if key is found

如果$key=>value匹配,如何刪除整個數組對象?

例如,在我的數據中,我有["endDate"]=> string(10) "2017-06-24" ,如果該日期與今天的date('Ym-d')相匹配,我希望從中刪除整個對象$row

碼:

foreach ($json->data as $row)
{       
   $date = date('Y-m-d');

   if($row->endDate == $date){

    $search = array_search($date, array_column('endDate', $row));

    unset($row[$search]);

    if (!in_array($row->guestEmail, $emails) && date('Y-m-d', strtotime($row->startDate))== date('Y-m-d'))
    {
        $guests[] = array(
            'FirstName'      => $row->guestFirstName,
            'LastName'       => $row->guestLastName,
            'email'          => $row->guestEmail,
            'country'        => $row->guestCountry,
            'check-in_date'  => $row->startDate,
            'check-out_date' => $row->endDate,
        );
        $emails[] = $row->guestEmail;
    }
  }
}

JSON:

$response = $o->curl(sprintf($url, $propertyID, $pageSize, $pageNumber, $resultsFrom));
$json = json_decode($response);

如果在您的foreach中的$ row之前放置一個&符號,則可以直接更改$ json-> data。 從您寫的內容來看,我想我理解您的問題,這可能就是您所需要的。

foreach ($json->data as &$row)
    {       
       $date = date('Y-m-d');

       if ($row->endDate == $date) {

        $search = array_search($date, array_column('endDate', get_object_vars($row)));

        unset($row[$search]);

        if (!in_array($row->guestEmail, $emails) && date('Y-m-d', strtotime($row->startDate))== date('Y-m-d'))
        {
            $guests[] = array(
                'FirstName'      => $row->guestFirstName,
                'LastName'       => $row->guestLastName,
                'email'          => $row->guestEmail,
                'country'        => $row->guestCountry,
                'check-in_date'  => $row->startDate,
                'check-out_date' => $row->endDate,
            );
            $emails[] = $row->guestEmail;
        }
      }
    }

如果沒有,請改一下您的問題,以便我提供您所需的答案。

$date = date('Y-m-d');
foreach ($json->data as $index=> $row){
    if($row->endDate == $date) unset($json->data{$index});
}

foreach ($json->data as $row){
    if (!in_array($row->guestEmail, $emails) && date('Y-m-d', strtotime($row->startDate))== date('Y-m-d'))
     {
        $guests[] = array(
            'FirstName'      => $row->guestFirstName,
            'LastName'       => $row->guestLastName,
            'email'          => $row->guestEmail,
            'country'        => $row->guestCountry,
            'check-in_date'  => $row->startDate,
            'check-out_date' => $row->endDate,
        );
        $emails[] = $row->guestEmail;
    }
  }

您可能還考慮跳到下一個迭代,因為看起來您正在構建訪客電子郵件列表,並且沒有嘗試修改json feed的來源。

$date = date('Y-m-d');
foreach ($json->data as $row){
    if($row->endDate == $date) {
       continue;
    }

     if (!in_array($row->guestEmail, $emails) && date('Y-m-d', strtotime($row->startDate))== date('Y-m-d'))
     {
        $guests[] = array(
            'FirstName'      => $row->guestFirstName,
            'LastName'       => $row->guestLastName,
            'email'          => $row->guestEmail,
            'country'        => $row->guestCountry,
            'check-in_date'  => $row->startDate,
            'check-out_date' => $row->endDate,
        );
        $emails[] = $row->guestEmail;
    }
}

在我提出的兩個選項之間,第二個選項需要較少的代碼,並且執行時間會稍短一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM