繁体   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