Php 如何判断一个数组在子数组中是否有多个数组

Php 如何判断一个数组在子数组中是否有多个数组,php,arrays,count,sub-array,Php,Arrays,Count,Sub Array,我有以下带有子数组[0]到[9]的数组。我想测试数组,看看是否有一个子数组或多个子数组。为什么?因为有时候我从一些表中得到一条记录,我必须能够判断我是否可以按原样保存它,还是应该使用foreach来保存它。我正在构建一个if-then语句,以确定是否有一条记录执行x,或者是否有两条或更多条记录执行y,并使用foreach方法。我还没有能够隔离子阵列并正确地计算它们,以便做出此决定。任何帮助都将不胜感激。所需要的只是如何测试一个或多个。谢谢注意:我使用的是php版本7.2.7 Array ( [R

我有以下带有子数组[0]到[9]的数组。我想测试数组,看看是否有一个子数组或多个子数组。为什么?因为有时候我从一些表中得到一条记录,我必须能够判断我是否可以按原样保存它,还是应该使用foreach来保存它。我正在构建一个if-then语句,以确定是否有一条记录执行x,或者是否有两条或更多条记录执行y,并使用foreach方法。我还没有能够隔离子阵列并正确地计算它们,以便做出此决定。任何帮助都将不胜感激。所需要的只是如何测试一个或多个。谢谢注意:我使用的是php版本7.2.7

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] => ) [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] => [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] => [CCDeposit_ID] => 0 [DRC_TransactionID] => 9 ) [5] => Array ( [Deposit_ID] => 0 [Receipt_ID] => 2785 [Account_ID] => `enter code here`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] => [CCDeposit_ID] => 0 [DRC_TransactionID] => ) [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] => ) [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] => ) [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] => [CCDeposit_ID] => 0 [DRC_TransactionID] => ) [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] => [CCDeposit_ID] => 0 [DRC_TransactionID] => 7 ) ) ) )

自2020年2月11日起新增

这是数组键

$array = Array($DepositsGetInfoArray);
print_r(array_keys($array));
数组([0]=>0)

注:单个记录没有与其相关联的索引,任何表中的任何单个记录都是如此-

 $arrDepositObjects = $DepositsGetInfoArray['DepositsGetInfoResult']['DepositObject'];   

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 ) ) ) 
注意:正如Abra所建议的,它可能将其视为一根绳子。因此,我仍然无法区分一条记录和多条记录。但挑战依然存在——如何做到这一点。以下是一些提示:

返回“false”

还有这个

    echo "<hr>";
function is_assoc($arrDepositObjects)
{
        return is_array($arrDepositObjects) && array_diff_key($arrDepositObjects,array_keys(array_keys($arrDepositObjects)));
}

function test($var)
{
        echo is_assoc($arrDepositObjects) ? "I'm an assoc array.\n" : "I'm not an assoc array.\n";
}
echo“
”; 函数是_assoc($arr对象) { 返回的是数组($arrDepositorObjects)和&array_diff_键($arrDepositorObjects,array_键(array_键($arrDepositorObjects)); } 功能测试($var) { echo是_assoc($arrDepositorObjects)?“我是一个assoc数组。\n”:“我不是一个assoc数组。\n”; }

不做任何不幸的事。再次感谢您的帮助…谢谢。

整数索引子数组位于
['ReceiptsGetInfoResult']['ReceiptObject']
下,因此只需计算一下:

$count = count($array['ReceiptsGetInfoResult']['ReceiptObject']);
但是实际上一个
foreach
对于一个数组元素来说是可以的,它只会循环一次。有什么问题吗

如果它可能根本不是数组,请检查它:

if(is_array($array['ReceiptsGetInfoResult']['ReceiptObject'])) {
    //foreach
} else {
    //don't foreach
}
您可以应用
count()
并执行所需操作:

$array = ["ReceiptsGetInfoResult" => ["ReceiptObject" => [["ClientID"=>122],["ClientID"=>123],["ClientID"=>124],]]];

if (count($array["ReceiptsGetInfoResult"]["ReceiptObject"]) === 1){
    // code for case X
} else if (count($array["ReceiptsGetInfoResult"]["ReceiptObject"]) > 1){
    // code for case Y 
}

所有的解决方案都会奏效

if (sizeof($array) > 1) {
    //do what ever you want
}else{
    //do what ever you want
}
详情:

计数和更有用的函数:

这将检查数组中的元素是否为数组

if(is_array($array['ReceiptsGetInfoResult']['ReceiptObject'])) {
   // This element is an array
}

详细信息:

可能已回答。。。?至少为您指明了检查数组深度的正确方向。@KamaranL:根据他们的要求和示例,这太过分了。@Dak请始终将对象/数组数据显示为
echo”“;var_导出($yourArray)在Stackoverflow上过帐时。有这么多的水平滚动与当前布局。此外,数据如何变化?目标子阵列有时不是阵列吗?如果它总是一个数组,只需像@Abra解释的那样使用一个循环。为什么
elseif
,而不仅仅是
>1
else
?@abracadver,OP明确地说是1和1以上。顺便说一句,数组中的
始终是一个数组。您正在计算数组中的元素,而不是数组中的“程序员”?这在测试单个记录时产生了错误:echo“testing IF COUNT:”;如果(count($arrDepositObjects['DepositsGetForesult']['DepositObject']])==1{echo'{“是的,它等于一”:“真”};}否则{echo'{“未确定”:“假”};}
is_数组
将始终为真->无用
else
。OP说我正在构建一个if-then语句来确定是否有一条记录然后执行x,或者是否有两条或更多条记录然后执行y,然后使用foreach方法。我发现了一个异常,我不知道为什么会发生。当一条记录存在时,它会分散数据。它希望从每个字段中绘制一个字符并保存该字符。然而,它可以很好地处理多个记录上的循环。插入tblNSF(存款ID、账户ID、存款类型、支票日期、支票编号、存款金额、存款状态、NSF原因、NSF日期、NSF代码、创建日期、DRC客户ID、DRC交易ID)值(“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”)1 2 2 2 2 2 2 2 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A。您需要在问题中显示两种类型的数组之间的差异。我在类似的对象上运行了此操作,但得到了错误的响应:if(is_array($arrDepostObjects['DepostGetForesult']['DepostObject']){//此元素是数组回音{“是的,它是数组”:“true”};}else{echo'{“不,它不是数组”:“false”}然后我运行if(count($array)>1){…它显示为true。如何从对象的角度接收两个不同的答案?背景中发生了什么?请参阅给定的链接,例如我在移动设备上,您可以使用var_dumb()或print_r()返回数组或者只要回显这是一个数组(如果是真的话)。该代码检查数组中的一个元素是否是另一个数组。请参阅每个解决方案答案中的给定链接。检查此链接而不是给定url以获取计数:给定url以用于相同计数结果的替代函数请参阅我在mobile上创建的is数组的快速示例:
if (count($array) > 1) {
    //do what ever you want
}else{
    //do what ever you want
}
if(is_array($array['ReceiptsGetInfoResult']['ReceiptObject'])) {
   // This element is an array
}