Php 两个数组,一个有索引,一个没有-如何测试

Php 两个数组,一个有索引,一个没有-如何测试,php,arrays,array-key-exists,Php,Arrays,Array Key Exists,我有两个数组。一个数组是一个没有索引的单记录数组-这是供应商提供所有单记录的方式。第二个数组(有两个或多个记录,包含索引[0]-[9]。我有一个foreach循环,它对多个记录非常有效,但foreach对单个记录(可能是字符串)不起作用。我需要一个解决方案来测试这两者之间的差异,最好的选择似乎是索引本身。如果您有不同的看法,请告诉我 这是数组键(在每次调用中都是相同的): 数组([0]=>0) 以下是单记录结果: Array ( [DepositsGetInfoResult] => Arr

我有两个数组。一个数组是一个没有索引的单记录数组-这是供应商提供所有单记录的方式。第二个数组(有两个或多个记录,包含索引[0]-[9]。我有一个foreach循环,它对多个记录非常有效,但foreach对单个记录(可能是字符串)不起作用。我需要一个解决方案来测试这两者之间的差异,最好的选择似乎是索引本身。如果您有不同的看法,请告诉我

这是数组键(在每次调用中都是相同的): 数组([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,
)
以下是多记录结果(请注意索引):


在我看来,我必须测试“[0]”,如果零存在,那么做X,否则做Y 计数可用于多条记录,但不可用于单个记录。 我尝试了数组\u密钥\u存在,但没有任何运气 我也尝试了数组搜索,但我没有做到


我的问题是:如何在此组合中测试索引0?我愿意接受任何在这种情况下有效的解决方案。非常感谢!

您在这里有两个不同的数据源,因此不清楚为什么要通过相同的过程运行它们,但您可以很容易地分辨出哪一个是哪一个

命令
array\u key\u exists()
,因此根据提供的数据,这应该可以工作,而不必麻烦地确定数组是索引的还是关联的:

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

    // this is the first type

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

    // this is the second type

}

感谢您的反馈。为了澄清,这是两个不同的表,但对这两个表使用相同的过程。一个表有一条记录,另一个表有10条记录。我没有尝试将它们混合在一起,只是测试和foreach insert。当收到一条记录时会出现问题。这一条记录没有与其相关联的索引。因此数组键不存在工作,因为它被认为是一个对象。在工作之后,我意识到我们不能使用array_key_存在。这两条线索使我得出了以下有效的结论:

$count1 = count($DepositsGetInfoArray); 
印刷费($count1)

上面的结果是1-但它告诉我们,它将其识别为一个对象,这是通过下面的测试确认的(不是它正在读取索引-没有索引)

}

上面返回“是,它是一个对象”:“true”-确认它是一个对象

以下是我所做的:

我设置了一个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);//对数组应用索引以进行循环处理

//数据数组-删除标题-并将其转换为数据数组([0]=>数组(和可用数据) $arrDepositObjects=Array($DepositsGetInfoArray['DepositsGetForResult']['DepositObject'])

foreach($intKey=>$data)对象//运行foreach


应用$sql insert

该数组无法工作
分析错误:语法错误,意外“[”,应为“)“
与此相同:所有答案都将返回false。如果我理解正确,请参阅示例数组。您希望能够通过相同的函数或foreach循环运行两个数据源。理想的处理方法是将单个数组转换为嵌套数组:
$multipleArray=[$singleArray];
$multipleArray][]=$singleArray;
。现在它将解析与第二个数组相同的内容。但这仅在您知道源代码的情况下才有效。否则,您需要测试它以确定它是否具有索引pr关联。您可以创建一个函数,该函数执行foreach,并根据键为数字或字符串立即返回布尔值。开始工作后,o在回答时,我突然意识到这两个数组只共享3个键。它们甚至不是同一个报告;一个用于资金不足,另一个用于成功存款。将它们运行到相同的foreach循环似乎有点奇怪,除非您只想收集
存款ID
帐户ID
,和
存款键入
if (!is_object($DepositsGetInfoArray)) { 
    echo '{"yes, its an object":"true"}';
} else {
    echo '{"no, its not an object":"false"}';
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)
} else {

if ($count1 === 1) {