簡體   English   中英

兩個數組,一個有索引,一個沒有 - 如何測試

[英]Two arrays, one with index one without - how to test

我有兩個數組。 一個數組是一個沒有索引的單個記錄數組——這是供應商提供所有單個記錄的方式。 第二個數組(有兩個或多個記錄包含索引 [0] - [9]。我有一個 foreach 循環,它在多個記錄上工作得很好,但 foreach 對單個記錄(可能是一個字符串)不起作用)。我需要一個解決方案來測試這兩者之間的差異,最好的選擇似乎是索引本身。如果您有不同的看法,請告訴我。

這是數組鍵(每次調用都相同): Array ( [0] => 0 )

以下是單條記錄結果:

Array ( [DepositsGetInfoResult] => Array ( [DepositObject] => Array ( [Deposit_ID] => 315 [Account_ID] => 2222100000010717 [Deposit_Type] => A [Check_Date] => 2019-08-09T00:00:00 [Check_Number] => 2783 [Deposit_Amount] => 210.00 [Deposit_Status] => NSF [NSF_Reason] => INSUF FUNDS [NSF_Date] => 2019-08-09T11:33:46.397 [NSF_Code] => R01 [Creation_Date] => 2019-08-09T11:32:00 [DRC_ClientID] => 2222 [DRC_TransactionID] => 9 ) ) ) 

    array (
  'Deposit_ID' => 315,
  'Account_ID' => '2222100000010717',
  'Deposit_Type' => 'A',
  'Check_Date' => '2019-08-09T00:00:00',
  'Check_Number' => 2783,
  'Deposit_Amount' => '210.00',
  'Deposit_Status' => 'NSF',
  'NSF_Reason' => 'INSUF FUNDS',
  'NSF_Date' => '2019-08-09T11:33:46.397',
  'NSF_Code' => 'R01                           ',
  'Creation_Date' => '2019-08-09T11:32:00',
  'DRC_ClientID' => '2222',
  'DRC_TransactionID' => 9,
)

這是多記錄結果(注意索引):

Array ( [ReceiptsGetInfoResult] => Array ( [ReceiptObject] => Array ( [0] => Array ( [Deposit_ID] => 0 [Receipt_ID] => 2777 [Account_ID] => 4555100000010792 [ClientID] => 1127 [DateReceived] => 2019-01-07T16:22:46.927 [DateEntered] => 2019-01-07T16:23:00 [Deposit_Amount] => 1.0000 [Deposit_Type] => C [DRC_ClientID] => 1196 [HoldDate] => [CCDeposit_ID] => 35 [DRC_TransactionID] => 0 ) [1] => Array ( [Deposit_ID] => 0 [Receipt_ID] => 2779 [Account_ID] => 4555100000010792 [ClientID] => 1127 [DateReceived] => 2019-01-30T10:48:35.55 [DateEntered] => 2019-01-30T10:49:00 [Deposit_Amount] => 1.0000 [Deposit_Type] => C [DRC_ClientID] => 1196 [HoldDate] => [CCDeposit_ID] => 36 [DRC_TransactionID] => 0 ) [2] => Array ( [Deposit_ID] => 0 [Receipt_ID] => 2781 [Account_ID] => 2222100000010717 [ClientID] => 1141 [DateReceived] => 2019-08-08T00:00:00 [DateEntered] => 2019-08-08T14:09:00 [Deposit_Amount] => 100.0000 [Deposit_Type] => A [DRC_ClientID] => 2222 [HoldDate] => [CCDeposit_ID] => 0 [DRC_TransactionID] => ))))

    array (
  0 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2777,
    'Account_ID' => '4555100000010792',
    'ClientID' => 1127,
    'DateReceived' => '2019-01-07T16:22:46.927',
    'DateEntered' => '2019-01-07T16:23:00',
    'Deposit_Amount' => '1.0000',
    'Deposit_Type' => 'C',
    'DRC_ClientID' => '1196',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 35,
    'DRC_TransactionID' => 0,
  ),
  1 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2779,
    'Account_ID' => '4555100000010792',
    'ClientID' => 1127,
    'DateReceived' => '2019-01-30T10:48:35.55',
    'DateEntered' => '2019-01-30T10:49:00',
    'Deposit_Amount' => '1.0000',
    'Deposit_Type' => 'C',
    'DRC_ClientID' => '1196',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 36,
    'DRC_TransactionID' => 0,
  ),
  2 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2781,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-08-08T00:00:00',
    'DateEntered' => '2019-08-08T14:09:00',
    'Deposit_Amount' => '100.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => NULL,
  ),
  3 => 
  array (
    'Deposit_ID' => 313,
    'Receipt_ID' => 2782,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-08-09T00:00:00',
    'DateEntered' => '2019-08-09T11:32:00',
    'Deposit_Amount' => '195.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => 8,
  ),
  4 => 
  array (
    'Deposit_ID' => 315,
    'Receipt_ID' => 2783,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-08-09T00:00:00',
    'DateEntered' => '2019-08-09T11:32:00',
    'Deposit_Amount' => '210.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => 9,
  ),
  5 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2785,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-10-03T00:00:00',
    'DateEntered' => '2019-10-03T11:51:00',
    'Deposit_Amount' => '19.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => NULL,
  ),
  6 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2787,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-09-28T00:00:00',
    'DateEntered' => '2019-10-03T11:52:00',
    'Deposit_Amount' => '28.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => '2019-09-28T00:00:00',
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => NULL,
  ),
  7 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2788,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-09-29T00:00:00',
    'DateEntered' => '2019-10-03T11:52:00',
    'Deposit_Amount' => '29.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => '2019-09-29T00:00:00',
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => NULL,
  ),
  8 => 
  array (
    'Deposit_ID' => 0,
    'Receipt_ID' => 2789,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2019-09-30T00:00:00',
    'DateEntered' => '2019-10-03T11:53:00',
    'Deposit_Amount' => '30.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => NULL,
  ),
  9 => 
  array (
    'Deposit_ID' => 417,
    'Receipt_ID' => 2791,
    'Account_ID' => '2222100000010717',
    'ClientID' => 1141,
    'DateReceived' => '2020-01-16T00:00:00',
    'DateEntered' => '2020-01-16T11:15:00',
    'Deposit_Amount' => '130.0000',
    'Deposit_Type' => 'A',
    'DRC_ClientID' => '2222',
    'HoldDate' => NULL,
    'CCDeposit_ID' => 0,
    'DRC_TransactionID' => 7,
  ),
)

正如我所見,我必須測試“[0]”,如果存在零,則執行 X 否則執行 Y Count 可處理多個記錄但不適用於單個記錄。 我嘗試過 array_key_exists 但沒有任何運氣我也嘗試過數組搜索但我沒有到達那里......

我的問題是:如何在此組合中測試索引 0? 我對任何適用於這種情況的解決方案持開放態度。 非常感謝!

這里有兩個不同的數據源,因此不清楚為什么要通過相同的過程運行它們,但您可以輕松分辨出哪個是哪個。

命令array_key_exists() 僅適用於第一級,因此根據提供的數據,這應該可以正常工作,而無需確定數組是索引還是關聯:

<?php
if( array_key_exists( 'DepositsGetInfoResult', $dataUnderTest )) { 

    // this is the first type

} elseif ( array_key_exists( 'ReceiptsGetInfoResult', $dataUnderTest )) {

    // this is the second type

}

現在,如果您想通過相同的 foreach 循環運行它們以挑選出公共鍵,

<?php
if( array_key_exists( 'DepositsGetInfoResult', $dataUnderTest )) { 

    // convert to an array similar to Receipts (add 0 index)
    $newArray = [ $dataUnderTest['DepositsGetInfoResult']['DepositObject'] ];

} elseif ( array_key_exists( 'ReceiptsGetInfoResult', $dataUnderTest )) {

    // extract part of Receipts
    $newArray = $dataUnderTest['ReceiptsGetInfoResult']['ReceiptObject'];

}

// the foreach loop you mentioned
foreach( $newArray as $record) {

    // do something

}

感謝您的反饋意見。 澄清一下,這是兩個不同的表,但兩者都使用相同的過程。 一個有1個記錄,另一個有10個記錄。 我不是試圖混合它們只是測試和 foreach 插入。 收到一條記錄時會出現此問題。 該記錄沒有與之關聯的索引。 所以 array_key_exists 不會工作,因為它被識別為一個對象。 在處理完這個之后,我意識到我們不能使用 array_key_exists。 這兩條線索使我得出了以下有效的結論:

$count1 = count($DepositsGetInfoArray); 

打印_r($count1);

上面的結果是 1 - 但它告訴我們它把它識別為一個由下面的測試確認的對象(不是它正在讀取一個索引 - 沒有索引)。

if (!is_object($DepositsGetInfoArray)) { 
    echo '{"yes, its an object":"true"}';
} else {
    echo '{"no, its not an object":"false"}';

}

以上返回“是的,它是一個對象”:“真” - 確認它是一個對象

所以這就是我所做的:

我設置了一個 if else 來測試對象。 如果它是一個對象,則使它成為一個帶有索引的數組,如果它的計數大於 1,則刪除標題,然后將其作為數據處理。

if ($count1 >1) { //anything larger than one when counting is counting indexes vs object

//REMOVES HEADERS AND MAKES DATA ARRAY ONLY (CONVERTS OBJECT INTO VARIABLE WITH DATA ONLY - NO HEADERS)
$arrDepositObjects = $DepositsGetInfoArray['DepositsGetInfoResult']['DepositObject'];

foreach($arrDepositObjects as $intKey => $data)

應用 $sql

} else {

if ($count1 === 1) {

$array = Array($DepositsGetInfoArray); //對數組應用索引進行循環處理

//DATA ARRAY -THIS REMOVES THE HEADERS - AND TURNS IT INTO data array ([0] => Array(and usable data) $arrDepositObjects = Array($DepositsGetInfoArray['DepositsGetInfoResult']['DepositObject']);

foreach($arrDepositObjects as $intKey => $data)// 運行 foreach

應用 $sql 插入

暫無
暫無

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

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