Как определить, есть ли в массиве более одного массива в подмассиве? - PullRequest
0 голосов
/ 31 января 2020

У меня есть следующий массив с вложенными массивами [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 ) ) ) )

Новое с 2/11 / 2020

это ключ массива

$array = Array($DepositsGetInfoArray);
print_r(array_keys($array));

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 ) ) ) 

Примечание: как предположил Абра, это можно рассматривать как строку. Поэтому я до сих пор не могу различить одну запись и несколько записей. Но проблема остается - как это сделать. Вот некоторые подсказки:

Возвращает «ложь»

echo 'TESTING IF COUNT :';
if (count($arrDepositObjects['DepositsGetInfoResult']['DepositObject']) === 1){
    echo '{"yes, its equal to one":"true"}';
} else {
    echo '{"undetermined":"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";
}

, к сожалению, ничего не делает. Опять же, любая помощь здесь приветствуется ... Спасибо.

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Вы можете подать заявку 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 
}
0 голосов
/ 31 января 2020

Все решения будут работать

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

Детали: https://www.php.net/manual/en/function.sizeof.php

Или

if (count($array) > 1) {
    //do what ever you want
}else{
    //do what ever you want
}

Подсчет и другие полезные функции: https://www.php.net/manual/en/function.array-count-values.php

Или

Это позволит проверить, является ли элемент в массиве массивом или нет

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

подробнее о : https://www.php.net/manual/en/function.is-array.php

0 голосов
/ 31 января 2020

Целочисленный индексированный подмассив меньше ['ReceiptsGetInfoResult']['ReceiptObject'], поэтому просто посчитайте, что:

$count = count($array['ReceiptsGetInfoResult']['ReceiptObject']);

Но на самом деле foreach в порядке с одним элементом массива, он будет только l oop один раз. В чем проблема?

Если это вообще не массив, проверьте его:

if(is_array($array['ReceiptsGetInfoResult']['ReceiptObject'])) {
    //foreach
} else {
    //don't foreach
}
...