-1

I have an array called "VALUES" that contains multiple arrays. In these array there is a field named "test", I only want the arrays pointed out that contains the number 4 in the test field.

my current output for Values array:

Array ( 

[0] => Array ( [entry_id] => 41149 [o_number] => 000001 [test1] => 000001 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[1] => Array ( [entry_id] => 41142 [o_number] => 000202[test1] => 000202 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[2] => Array ( [entry_id] => 41103 [o_number] => 000003 [test1] => 000003 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[3] => Array ( [entry_id] => 41101 [o_number] => 000044 [test1] => 000044 [test2] => 1234 [lev] => Ja [fak] => Manuel/brev [beta] => 10 [test] => 2 ) 

[4] => Array ( [entry_id] => 41100 [o_number] => 000542 [test1] => 000542 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[5] => Array ( [entry_id] => 41088 [o_number] => 001231 [test1] => 001231 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 3 ))

desired output:

Array ( 

[0] => Array ( [entry_id] => 41149 [o_number] => 000001 [test1] => 000001 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[1] => Array ( [entry_id] => 41142 [o_number] => 000202[test1] => 000202 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[2] => Array ( [entry_id] => 41103 [o_number] => 000003 [test1] => 000003 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ) 

[3] => Array ( [entry_id] => 41100 [o_number] => 000542 [test1] => 000542 [test2] => 1234 [lev] => Ja [fak] => Mail [beta] => 30 [test] => 4 ))

I tried with a foreach but it didn't work

    foreach ($values as $key) 
    {
        if($key === 4)
        {
//This will only show
    print_r($key);

//delete array?

        }
    }
Zaz
  • 1,074
  • 3
  • 17
  • 29
  • Have you seen this: http://stackoverflow.com/questions/369602/delete-an-element-from-an-array?rq=1 – Joum Sep 02 '13 at 14:19

5 Answers5

0

not exactly sure what you meant, but if you want to iterate over an array in another array try

foreach($values as $key => $innerArray) {
    if($innerArray['test'] === 4) {
         do_something();
    }
}
TomGrill Games
  • 1,553
  • 2
  • 16
  • 25
0

Try following codes:

foreach ($values as $key => &$value) 
{
   if($value['test'] != "4")
      unset($values[$key]);
}

var_dump($values);
Bora
  • 10,529
  • 5
  • 43
  • 73
0

I think, you should use

//simplified:
$values = array( [0]=>array(['test']=>4))

foreach ($values as $key=>&$sub_values) 
    {
        if($sub_values['test'] === 4)
        {
//This will only show
    print_r($sub_values);

        }else{
          //deleting subarray
          unset($sub_values);
        }
    }

No?

knes
  • 873
  • 1
  • 6
  • 10
0
foreach ($values as $key => $value)
{
    if(checkArray())
    {
        continue;
    }
    // do other things
}

function checkArray($arr)
{
    foreach ($arr as $key => $value) 
    {
        if ($key === 'test' && $value === 4) {
                return true;
        }
    }
    return false;
}
0x_Anakin
  • 3,229
  • 5
  • 47
  • 86
0

Since you are using multidimensional arrays it is not that easy to check whether or not any array consists of that key, without traversing through it. In order to traverse, you can use foreach

foreach($values as $array) {
    //Now here you can check if the there is `test` index available or is of value `4`

    if(isset($array['test'])) && $array['test'] == '4') {
        //Only then output it
        var_dump($array);
    }
}

It is that simple.

Starx
  • 77,474
  • 47
  • 185
  • 261