[英]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.