Meta Code
Meta Code

Reputation: 607

how to filter two multidimensional array's?

First of all, I have seen the "similar" questions, none of them solve my problem, what I need is that the "impuesto" value of the array "a" is equal to the key of the array "b". and if not, remove those that are not equal to the array "b"

I have two multidimensional arrays (a and b). and I need to filter all those who are not in the first

Example:

a)

      [1]=>
      array(1) {
        ["impuesto"]=>
        string(11) "recaudacion"
      }
      [3]=>
      array(1) {
        ["impuesto"]=>
        string(36) "Contribuyentes Convenio Multilateral"
      }
      [4]=>
      array(1) {
        ["impuesto"]=>
        string(28) "Regimen General de Retencion"
      }

b)

  ["recaudacion"]=>
  array(1) {
    [9]=>
    string(10) "2017-10-07"
  }
  ["Contribuyentes Convenio Multilateral"]=>
  array(1) {
    [9]=>
    string(10) "2017-10-13"
  }
  ["Contribuyentes Locales,Activid. Especiales y Salas de Recreacion"]=>
  array(1) {
    [9]=>
    string(10) "2017-10-16"
  }

result:

    ["recaudacion"]=>
  array(1) {
    [9]=>
    string(10) "2017-10-07"
  }
  ["Contribuyentes Convenio Multilateral"]=>
  array(1) {
    [9]=>
    string(10) "2017-10-13"
  }

Here you can see the original arrays

a)

array(2) {
  [0]=>
  array(1) {
    [257]=>
    array(18) {
      [0]=>
      array(1) {
        ["impuesto"]=>
        string(38) "Ingresos Brutos Contribuyentes Locales"
      }
      [1]=>
      array(1) {
        ["impuesto"]=>
        string(11) "recaudacion"
      }
      [2]=>
      array(1) {
        ["impuesto"]=>
        string(64) "Contribuyentes Locales,Activid. Especiales y Salas de Recreacion"
      }
      [3]=>
      array(1) {
        ["impuesto"]=>
        string(36) "Contribuyentes Convenio Multilateral"
      }
      [4]=>
      array(1) {
        ["impuesto"]=>
        string(28) "Regimen General de Retencion"
      }
      [5]=>
      array(1) {
        ["impuesto"]=>
        string(41) "Regimen General de Percepcion (Devengado)"
      }
      [6]=>
      array(1) {
        ["impuesto"]=>
        string(46) "Comercializacion de Combustibles liquidos deri"
      }
      [7]=>
      array(1) {
        ["impuesto"]=>
        string(44) "Registro Seccional de la Propiedad Automotor"
      }
      [8]=>
      array(1) {
        ["impuesto"]=>
        string(19) "Entidades Bancarias"
      }
      [9]=>
      array(1) {
        ["impuesto"]=>
        string(60) "Companias de Seguros Embarcaciones Deportivas y Recreaciones"
      }
      [10]=>
      array(1) {
        ["impuesto"]=>
        string(21) "Empresas de Servicios"
      }
      [11]=>
      array(1) {
        ["impuesto"]=>
        string(20) "Regimen simplificado"
      }
      [12]=>
      array(1) {
        ["impuesto"]=>
        string(3) "IVA"
      }
      [13]=>
      array(1) {
        ["impuesto"]=>
        string(29) "EMPLEADOR-APORTES SEG. SOCIAL"
      }
      [14]=>
      array(1) {
        ["impuesto"]=>
        string(25) "REGIMENES DE INFORMACIÓN"
      }
      [15]=>
      array(1) {
        ["impuesto"]=>
        string(52) "Declaracion Jurada Fiscal 2016 Contibuyentes Locales"
      }
      [16]=>
      array(1) {
        ["impuesto"]=>
        string(29) "PRESENTAC. DJ RET. Y/O PERCEP"
      }
      [17]=>
      array(1) {
        ["impuesto"]=>
        string(28) "SICORE-IMPTO.A LAS GANANCIAS"
      }
    }
  }
  [1]=>
  array(1) {
    [258]=>
    array(3) {
      [0]=>
      array(1) {
        ["impuesto"]=>
        string(19) "Impuestos de Sellos"
      }
      [1]=>
      array(1) {
        ["impuesto"]=>
        string(69) "Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral"
      }
      [2]=>
      array(1) {
        ["impuesto"]=>
        string(51) "Recategorizacion cuatrimestral regimen simplificado"
      }
    }
  }
}

b)

    array(2) {
  [0]=>
  array(1) {
    [257]=>
    array(8) {
      ["recaudacion"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-07"
      }
      ["Contribuyentes Convenio Multilateral"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-13"
      }
      ["Contribuyentes Locales,Activid. Especiales y Salas de Recreacion"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-16"
      }
      ["Regimen simplificado"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Declaracion Jurada Fiscal 2016 Contibuyentes Locales"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Recategorizacion cuatrimestral regimen simplificado"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Impuestos de Sellos"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-10"
      }
    }
  }
  [1]=>
  array(1) {
    [258]=>
    array(8) {
      ["recaudacion"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-07"
      }
      ["Contribuyentes Convenio Multilateral"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-13"
      }
      ["Contribuyentes Locales,Activid. Especiales y Salas de Recreacion"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-17"
      }
      ["Regimen simplificado"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Declaracion Jurada Fiscal 2016 Contibuyentes Locales"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Recategorizacion cuatrimestral regimen simplificado"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-00"
      }
      ["Impuestos de Sellos"]=>
      array(1) {
        [9]=>
        string(10) "2017-10-10"
      }
    }
  }
}

if you need to see the code just ask for it, there will be no problem in showing it

Upvotes: 1

Views: 65

Answers (2)

YouneL
YouneL

Reputation: 8361

I achieve this by using nested foreach loop, you can try my code here: php sandbox, it keeps the same a array except keys from b array.

Upvotes: 1

Nic3500
Nic3500

Reputation: 8611

The key here is to use array_key_exists. So you loop on the values from array a) and check if they exists in array b). If they do, put them in the result array. Like this:

$arraya = array(
                1 => array("impuesto" => "recaudacion"),
                3 => array("impuesto" => "Contribuyentes Convenio Multilateral"),
                4 => array("impuesto" => "Regimen General de Retencion")
               );

$arrayb = array(
                "recaudacion" => array(9 => "2017-10-07"),
                "Contribuyentes Convenio Multilateral" => array(9 => "2017-10-13"),
                "Contribuyentes Locales,Activid. Especiales y Salas de Recreacion" => array(9 => "2017-10-16")
               );

echo "<pre>\n";
echo "ARRAY A\n";
print_r($arraya);
echo "\nARRAY B\n";
print_r($arrayb);

# filter
$result = array();
foreach ($arraya as $key => $value)
{
    $impuesto_value = "$value[impuesto]";
    if (array_key_exists($impuesto_value, $arrayb))
    {
        $result[$impuesto_value] = $arrayb[$impuesto_value];
    }
}

echo "\nRESULT ARRAY\n";
print_r($result);
echo "</pre>\n";

This will output the following:

ARRAY A
Array
(
    [1] => Array
        (
            [impuesto] => recaudacion
        )

    [3] => Array
        (
            [impuesto] => Contribuyentes Convenio Multilateral
        )

    [4] => Array
        (
            [impuesto] => Regimen General de Retencion
        )

)

ARRAY B
Array
(
    [recaudacion] => Array
        (
            [9] => 2017-10-07
        )

    [Contribuyentes Convenio Multilateral] => Array
        (
            [9] => 2017-10-13
        )

    [Contribuyentes Locales,Activid. Especiales y Salas de Recreacion] => Array
        (
            [9] => 2017-10-16
        )

)

RESULT ARRAY
Array
(
    [recaudacion] => Array
        (
            [9] => 2017-10-07
        )

    [Contribuyentes Convenio Multilateral] => Array
        (
            [9] => 2017-10-13
        )

)

Upvotes: 1

Related Questions