-2

I've a multidimensional array looks like below-

Array
(
    [0] => Array
        (
            [0] => Account Number
            [1] => Account Title
            [2] => Account Type
            [3] => Currency
            [4] => Available Balance
            [5] => Ledger Balance
        )

    [1] => Array
        (
            [0] => xxxxxxxx YYYYYYY
        )

    [2] => Array
        (
            [0] => 
        )

    [3] => Array
        (
            [0] => Date
            [1] => Description
            [2] => Withdrawal
            [3] => Deposit
            [4] => Balance
        )

    [4] => Array
        (
            [0] => 
        )

    [5] => Array
        (
            [0] => `30/08/2018
            [1] => EXIM 5287609
            [2] => -
            [3] => 25000.00
            [4] => 62672.880
        )

    [6] => Array
        (
            [0] => `03/09/2018
            [1] => PRIME 9373059
            [2] => -
            [3] => 191920.00
            [4] => 254592.880
        )

    [7] => Array
        (
            [0] => `04/09/2018
            [1] => RV CLEARING FEE-CHQ 9373059
            [2] => 8.70
            [3] => -
            [4] => 254584.180
        )

    [8] => Array
        (
            [0] => `04/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 254582.880
        )

    [9] => Array
        (
            [0] => `04/09/2018
            [1] => ATM WDR AT 4503 13:55:02
            [2] => 20000.00
            [3] => -
            [4] => 234582.880
        )

    [10] => Array
        (
            [0] => `08/09/2018
            [1] => ATM WDR AT 4504 11:58:19
            [2] => 10000.00
            [3] => -
            [4] => 224582.880
        )

    [11] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:05:19
            [2] => 40000.00
            [3] => -
            [4] => 184582.880
        )

    [12] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:05:59
            [2] => 40000.00
            [3] => -
            [4] => 144582.880
        )

    [13] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:06:37
            [2] => 20000.00
            [3] => -
            [4] => 124582.880
        )

    [14] => Array
        (
            [0] => `12/09/2018
            [1] => B ASIA 5904486
            [2] => -
            [3] => 490000.00
            [4] => 614582.880
        )

    [15] => Array
        (
            [0] => `12/09/2018
            [1] => B ASIA 5904486 RETURN
            [2] => 490000.00
            [3] => -
            [4] => 124582.880
        )

    [16] => Array
        (
            [0] => `12/09/2018
            [1] => RV CLEARING FEE-CHQ 5904486
            [2] => 8.70
            [3] => -
            [4] => 124574.180
        )

    [17] => Array
        (
            [0] => `12/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 124572.880
        )

    [18] => Array
        (
            [0] => `12/09/2018
            [1] => ATM WDR AT 4500 12:31:55
            [2] => 20000.00
            [3] => -
            [4] => 104572.880
        )

    [19] => Array
        (
            [0] => `13/09/2018
            [1] => ATM WDR AT 4503 14:59:28
            [2] => 20000.00
            [3] => -
            [4] => 84572.880
        )

    [20] => Array
        (
            [0] => `16/09/2018
            [1] => ATM WDR AT 4500 17:10:04
            [2] => 10000.00
            [3] => -
            [4] => 74572.880
        )

    [21] => Array
        (
            [0] => `19/09/2018
            [1] => B ASIA 5904486
            [2] => -
            [3] => 490000.00
            [4] => 564572.880
        )

    [22] => Array
        (
            [0] => `19/09/2018
            [1] => ATM WDR AT 4502 16:24:29
            [2] => 40000.00
            [3] => -
            [4] => 524572.880
        )

    [23] => Array
        (
            [0] => `19/09/2018
            [1] => ATM WDR AT 4502 16:25:12
            [2] => 10000.00
            [3] => -
            [4] => 514572.880
        )

    [24] => Array
        (
            [0] => `20/09/2018
            [1] => B ASIA 5904486 RETURN
            [2] => 490000.00
            [3] => -
            [4] => 24572.880
        )

    [25] => Array
        (
            [0] => `20/09/2018
            [1] => RV CLEARING FEE-CHQ 5904486
            [2] => 8.70
            [3] => -
            [4] => 24564.180
        )

    [26] => Array
        (
            [0] => `20/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 24562.880
        )

    [27] => Array
        (
            [0] => `22/09/2018
            [1] => ATM WDR AT 4500 14:09:11
            [2] => 15000.00
            [3] => -
            [4] => 9562.880
        )

    [28] => Array
        (
            [0] => `24/09/2018
            [1] => CASH DEPOSIT
            [2] => -
            [3] => 100000.00
            [4] => 109562.880
        )

    [29] => Array
        (
            [0] => `25/09/2018
            [1] => EFT TO PRIME BANK LT
            [2] => 45000.00
            [3] => -
            [4] => 64562.880
        )

    [30] => Array
        (
            [0] => `26/09/2018
            [1] => ATM WDR AT 4503 11:06:25
            [2] => 5000.00
            [3] => -
            [4] => 59562.880
        )

)

Now I need a new array looks like below-

array(
[1] => Array
        (
            [0] => Date
            [1] => Description
            [2] => Withdrawal
            [3] => Deposit
            [4] => Balance
        )
    [2] => Array
        (
            [0] => `30/08/2018
            [1] => EXIM 5287609
            [2] => -
            [3] => 25000.00
            [4] => 62672.880
        )

    [3] => Array
        (
            [0] => `03/09/2018
            [1] => PRIME 9373059
            [2] => -
            [3] => 191920.00
            [4] => 254592.880
        )

    [4] => Array
        (
            [0] => `04/09/2018
            [1] => RV CLEARING FEE-CHQ 9373059
            [2] => 8.70
            [3] => -
            [4] => 254584.180
        )

    [5] => Array
        (
            [0] => `04/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 254582.880
        )

    [6] => Array
        (
            [0] => `04/09/2018
            [1] => ATM WDR AT 4503 13:55:02
            [2] => 20000.00
            [3] => -
            [4] => 234582.880
        )

    [7] => Array
        (
            [0] => `08/09/2018
            [1] => ATM WDR AT 4504 11:58:19
            [2] => 10000.00
            [3] => -
            [4] => 224582.880
        )

    [8] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:05:19
            [2] => 40000.00
            [3] => -
            [4] => 184582.880
        )

    [9] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:05:59
            [2] => 40000.00
            [3] => -
            [4] => 144582.880
        )

    [10] => Array
        (
            [0] => `09/09/2018
            [1] => ATM WDR AT 4500 20:06:37
            [2] => 20000.00
            [3] => -
            [4] => 124582.880
        )

    [11] => Array
        (
            [0] => `12/09/2018
            [1] => B ASIA 5904486
            [2] => -
            [3] => 490000.00
            [4] => 614582.880
        )

    [12] => Array
        (
            [0] => `12/09/2018
            [1] => B ASIA 5904486 RETURN
            [2] => 490000.00
            [3] => -
            [4] => 124582.880
        )

    [13] => Array
        (
            [0] => `12/09/2018
            [1] => RV CLEARING FEE-CHQ 5904486
            [2] => 8.70
            [3] => -
            [4] => 124574.180
        )

    [14] => Array
        (
            [0] => `12/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 124572.880
        )

    [15] => Array
        (
            [0] => `12/09/2018
            [1] => ATM WDR AT 4500 12:31:55
            [2] => 20000.00
            [3] => -
            [4] => 104572.880
        )

    [16] => Array
        (
            [0] => `13/09/2018
            [1] => ATM WDR AT 4503 14:59:28
            [2] => 20000.00
            [3] => -
            [4] => 84572.880
        )

    [17] => Array
        (
            [0] => `16/09/2018
            [1] => ATM WDR AT 4500 17:10:04
            [2] => 10000.00
            [3] => -
            [4] => 74572.880
        )

    [18] => Array
        (
            [0] => `19/09/2018
            [1] => B ASIA 5904486
            [2] => -
            [3] => 490000.00
            [4] => 564572.880
        )

    [19] => Array
        (
            [0] => `19/09/2018
            [1] => ATM WDR AT 4502 16:24:29
            [2] => 40000.00
            [3] => -
            [4] => 524572.880
        )

    [20] => Array
        (
            [0] => `19/09/2018
            [1] => ATM WDR AT 4502 16:25:12
            [2] => 10000.00
            [3] => -
            [4] => 514572.880
        )

    [21] => Array
        (
            [0] => `20/09/2018
            [1] => B ASIA 5904486 RETURN
            [2] => 490000.00
            [3] => -
            [4] => 24572.880
        )

    [22] => Array
        (
            [0] => `20/09/2018
            [1] => RV CLEARING FEE-CHQ 5904486
            [2] => 8.70
            [3] => -
            [4] => 24564.180
        )

    [23] => Array
        (
            [0] => `20/09/2018
            [1] => VAT AT SOURCE
            [2] => 1.30
            [3] => -
            [4] => 24562.880
        )

    [24] => Array
        (
            [0] => `22/09/2018
            [1] => ATM WDR AT 4500 14:09:11
            [2] => 15000.00
            [3] => -
            [4] => 9562.880
        )

    [25] => Array
        (
            [0] => `24/09/2018
            [1] => CASH DEPOSIT
            [2] => -
            [3] => 100000.00
            [4] => 109562.880
        )

    [26] => Array
        (
            [0] => `25/09/2018
            [1] => EFT TO PRIME BANK LT
            [2] => 45000.00
            [3] => -
            [4] => 64562.880
        )

    [27] => Array
        (
            [0] => `26/09/2018
            [1] => ATM WDR AT 4503 11:06:25
            [2] => 5000.00
            [3] => -
            [4] => 59562.880
        )
)

I know by using a loop I can separate my desired arrays and can crate a new array. But without any loop, is it possible to create a new array by PHP built in method?

Advance thanks for all of you who will give me a nice solution.

Note:- array will be too long. It's a bank transaction array so need a fast method which will give output within the shortest time.

Mihai
  • 26,325
  • 7
  • 66
  • 81
  • Use `unset($arr[0], $arr[1], $arr[2], $arr[4])` – Mohammad Oct 01 '18 at 07:32
  • If i get a more undesired array between 0 to 4 indexes. Basically a csv file uploaded by the user so I'm not sure how many unexpected array will be available on that document and different bank will give different data but some sort of data are same thats why I need to separate only those array which length is 4. Thanks Dear – Mahmudul Hasan Oct 01 '18 at 07:57
  • If you are looking for best performance then your best bet is to use the `for` loop, `array_filter` is the slower approach, because you first have the overhead of calling the `array_filter` function itself, and then the anonymous callback on every member of your array. – Sasa Blagojevic Oct 01 '18 at 08:33
  • So simply by one loop (for loop) I can accept and reject each member array. This is more faster rather then once create new array by array_filter with callback function after that calling a loop for data process.... – Mahmudul Hasan Oct 01 '18 at 10:28

2 Answers2

1

You can filter arrays based on it length using array_filter()

$newArr = array_filter($arr, function($item){
    return sizeof($item) == 5;
});

If your array is large and you need a fast method, use foreach instead

foreach ($arr as $key=>$item)
    sizeof($item) != 5 ? unset($arr[$key]) : "";
Mohammad
  • 21,175
  • 15
  • 55
  • 84
0

All activities on one go...

$length=count($arr);

for($i=0;$i<$length;$i++){
    if(count($arr[$i])==4){
       // execute desired process 
    }
}