1

I need to filter my php array of arrays and make it unique. Here is my array:

array (size=50)
  0 => 
    array (size=1)
      'circuit_reference' => string '1' (length=1)
  1 => 
    array (size=2)
      'circuit_reference' => string '1' (length=1)
      'circuit_phase' => string 'L1' (length=2)
  2 => 
    array (size=3)
      'circuit_reference' => string '1' (length=1)
      'circuit_phase' => string 'L1' (length=2)
      'circuit_is_sub_main' => string 'N' (length=1)
  3 => 
    array (size=1)
      'circuit_reference' => string '1' (length=1)
  4 => 
    array (size=2)
      'circuit_reference' => string '1' (length=1)
      'circuit_phase' => string 'L2' (length=2)

I need to have in new array only subarrays with max counts elements:

array(
  1 => 
    array (size=3)
      'circuit_reference' => string '1' (length=1)
      'circuit_phase' => string 'L1' (length=2)
      'circuit_is_sub_main' => string 'N' (length=1)
  2 => 
   array (size=2)
      'circuit_reference' => string '1' (length=1)
      'circuit_phase' => string 'L2' (length=2)

Stucked with answer(

2 Answers 2

1

I solved this tasked myself, here is answer:

            foreach ($arrays as $array) {
                if (isset($array['circuit_reference']) && isset($array['circuit_phase'])) {
                    if ($curr == '' && $curt == '') {
                        $curr = $array['circuit_reference'];
                        $curt = $array['circuit_phase'];
                    }
                    if ($curr != $array['circuit_reference'] || $curt != $array['circuit_phase']) {
                        $curr = $array['circuit_reference'];
                        $curt = $array['circuit_phase'];
                        $resulted_circuits[] = $arrays[$maxin];
                        $countm = 0;
                        $maxin = 0;
                    }
                    if ($countm < count($array)) {
                        $countm = count($array);
                        $maxin = $i;
                    }
                }
                $i++;
            }
            if ($maxin != 0 && $maxin <= count($arrays)) {
                $resulted_circuits[] = $arrays[$maxin];
            }

Thanks to everybody.

Sign up to request clarification or add additional context in comments.

Comments

0

Try with this

$arrays = array( 
    array('circuit_reference' => '1'),
    array('circuit_reference' =>  '1', 'circuit_phase' =>  'L1'),
    array('circuit_reference' =>  '1', 'circuit_phase' =>  'L1','circuit_is_sub_main' => 'N'), 
    array('circuit_reference' =>  '1'),
    array('circuit_reference' =>  '1', 'circuit_phase' =>  'L2'),
    array('circuit_reference' =>  '1', 'circuit_phase' =>  'L2','circuit_is_sub_main' => 'N' )
);

$max = count(max($arrays));
foreach($arrays as $arr)
{
    if(count($arr) == $max)
        $arrays1[] = $arr;
}   
var_dump($arrays1);

out put

array(2) {
  [0]=>
  array(3) {
    ["circuit_reference"]=>
    string(1) "1"
    ["circuit_phase"]=>
    string(2) "L1"
    ["circuit_is_sub_main"]=>
    string(1) "N"
  }
  [1]=>
  array(3) {
    ["circuit_reference"]=>
    string(1) "1"
    ["circuit_phase"]=>
    string(2) "L2"
    ["circuit_is_sub_main"]=>
    string(1) "N"
  }
}

4 Comments

Doesnt help, the result is just ` 1 => ` ` array (size=3)` ` 'circuit_reference' => string '1' (length=1)` ` 'circuit_phase' => string 'L2' (length=2)` ` 'circuit_is_sub_main' => string 'N' (length=1))` Only one subarray, but need the max of each.
Thanks, but max of elements is variable value (not all max 3), I will update my example now.
what you mean with "I need to have in new array only subarrays with max counts elements:" ?
For each "circuit_reference" and "circuit_phase" I need max corresponding subarray.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.