2016-11-30 69 views
0

我在我的問題的底部有一個主PHP數組。它的工作原理與編碼完全一致。我的問題侷限於數組中顯示的「內容」對象。對多維數組內存在子數組的條件變化

'content'對象應該包含最多10個子數組($ newSubArray0-9),每個子數組根據下面的這個簡單循環填充圖像數據(數據全部可從先前的數據庫查詢中獲得 - 所以沒有問題)。現在

//get data for the 'content' object sub arrays.... 
for($i = 0; $i<9; $i++) { 
$newSubArray.$i = 
[ 
'url' => $uploadspath.$media_url.$i,//main image 
"type" =>$type.$i,//media type 
"caption"=>$caption.$i 
]; 
} 

...主陣列在下面我只是需要能夠排除或刪除任何$ newSubArray的(0-9)情況下,如果相應的媒體條件下產生的空介質的結果,即( !media_url。$ i)或($ media_url。$ i =「」)。

我已經試過......

If (media-conditon) 
...{$newSubArray.$i=UNSET($newSubArray.$i);} 
...{$newSubArray.$i=array_filter($newSubArray.$i);} 
...{$newSubArray.$i=array_values($newSubArray.$i);} 

所有這些努力的影響,我想完全刪除子數組元素(基於條件),但留下的子陣列本身如「無」的痕跡。該跟蹤會導致後續數據驗證失敗。虛擬化正在通過json數據發送到的第三方API完成 - 所以我無法更改驗證。我需要在那裏沒有任何關聯$ media_url值的子數組沒有記錄。

以下是主陣列的一部分,其中包含需要有條件地包含或排除的子陣列元素,具體取決於關聯圖像的可用性。這一切工作正常...只需要解決上述問題。

$data = json_encode 
(
array 
    (

      "location" =>array 
      (
       "property_number_or_name" => $house_name_number, 
       "street_name" => $propaddress1, 
       "locality" => $propaddress2, 
       "town_or_city" => $town, 
       "postal_code" => $postcode, 
       "country_code" => "GB", 
       "coordinates"=>array 
            (

             "latitude"=>(float)$latitude, 
             "longitude"=>(float)$longitude 

            ) 
      ), 

      "pricing" =>array 
      (
      "rent_frequency" => $rent_frequency, 
      "currency_code" => "GBP", 
      "price" => (int)$price, 
      "transaction_type" => "rent" 
      ), 


      "detailed_description" =>array 
             (
             array 
              (
              "text" => $description 
              ) 
             ), 

      "content" => array 
         (
          $newSubArray0,//remove this sub array completely if no media_url0 
          $newSubArray1,//remove this sub array completely if no media_url1 
          $newSubArray2,//remove this sub array completely if no media_url2 
          $newSubArray3,//remove this sub array completely if no media_url3 
          $newSubArray4,//remove this sub array completely if no media_url4 
          $newSubArray5,//remove this sub array completely if no media_url5 
          $newSubArray6,//remove this sub array completely if no media_url6 
          $newSubArray7,//remove this sub array completely if no media_url7 
          $newSubArray8,//remove this sub array completely if no media_url8 
          $newSubArray9 //remove this sub array completely  if no media_url9        
         ), 

      "google_street_view"=>array 
          (
          "heading"=>(float)$pov_heading, 
          "pitch"=> (float)$pov_pitch, 
          "coordinates"=> array        
             (
             "latitude"=>(float)$pov_latitude, 
             "longitude"=>(float)$pov_longitude 
             ) 
          ), 


      "display_address"=> $display_address, 
      "summary_description"=> $summary 

,JSON_UNESCAPED_SLASHES); 

回答

0

你可能想unset但不存儲在同一個地方調用的結果。

此致:

If (media-conditon) 
    ...{$newSubArray.$i=UNSET($newSubArray.$i);} 

更新:

If (media-conditon) 
    ...{UNSET($newSubArray.$i);} 

您還可以通過你的內容數據組的元素之前驗證您的媒體條件下做到這一點更有效。

+0

嗨凱文。這次真是萬分感謝。我很困惑爲什麼unset不起作用。請你給我一點解釋你的新建議。 [很高興首先設置內容數組]。只是儘量保持這個儘可能簡單,因爲有這個代碼的一大堆實例。 – user2755309

+0

如果有大量代碼實例,則應該考慮將其抽象化。爲了幫助進一步瞭解爲什麼unset不適合你,我們需要更多的真實代碼,而不是像你的問題那樣使用僞代碼。 –

+0

所以我只是在測試腳本之前,整個陣列如下.. – user2755309