2016-05-29 8 views
0

I unten Array,Filter multidimenstion Array mit Bedingungslogik

Array ([0] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi) [1] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730) [2] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [3] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello) 

Ich möchte dieses Array filtern, mit Benutzernummer = 1, dies es 1-Array mit Arrays schaffen wird, die Benutzernummer = 1 haben, in ähnlicher Weise wird es schaffen für Benutzernummer = 2

ich hatte Benutzer in DB und Benutzer in diesem Array suchen,

ich unten Code versucht,

$users = $this->admin_model->get_usersforshipment(); 
foreach ($users as $user) { 

    $filtered = array_filter($csv_array, function($user) 

    { //Below is retrurning as orignal $csv_array, not filtered, 
    return !empty($user['usernumber']); 

    }); 

} 

gewünschte Ausgabe, wenn $ Benutzer [ 'Benutzernummer] == 1

Array ([0] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi) [1] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730)) 

gewünschte Ausgabe, wenn $ users [' Benutzernummer] == 2

Array ([0] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [1] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello) 

Wie ich nur zwei Arrays filtern aus Multi-Dimension-Array?

+0

Verwenden Sie 'array_column' und dann' foreach' mit array_search. –

+0

Können Sie zeigen, was Ihre Wunschausgabe ist? Wie sieht '$ filtered 'nach dem Filter aus? –

+0

@Fraynekonok, aktualisierte gewünschte Ausgabe – rjcode

Antwort

1

Online Example, Beschreibung hinzugefügt, nachdem Ihr Feedback.

$arr = array(
     array ('location' => 'X33', 
       'usernumber' => 1, 
       'order' => 'XX', 
       'part_number' => 'Hi' 
      ), 
     array ('location' => 'X33', 
       'usernumber' => 1, 
       'order' => 'XX', 
       'part_number' => '68730' 
       ), 
     array ('location' => 'W33', 
       'usernumber' => 2, 
       'order' => 'YY', 
       'part_number' => '68741' 
       ), 
     array ('location' => 'W33', 
       'usernumber' => 2, 
       'order' => 'YY', 
       'part_number' => 'Hello' 
      ) 
    ); 

$out = array(); 
$index = $arr[0]['usernumber']; 
foreach($arr as $val){ 
    if($index != $val['usernumber']) 
     $index = $val['usernumber']; 
    $out[$index][] = $val; 
} 
echo '<pre>'; 
print_r($out); 
+1

Danke, das hat sehr geholfen, jetzt die gewünschte Ausgabe zu bekommen! Danke! – rjcode

1

Derzeit ist das Array wie so definiert:

$array = [ 
    0 => [ 
     'location' => l1 
     'usernumber' => 1 
     'order' => 'o1' 
    ], 
    1 => [ 
     'location' => l2 
     'usernumber' => 1 
     'order' => 'o2' 
    ], 
    2 => [ 
     'location' => l3 
     'usernumber' => 2 
     'order' => 'o3' 
    ] 
]; 

Eine gute Lösung, um die usernumber Variablen als Schlüssel für das Array zu setzen wäre. Sie können dies beim Erstellen des Arrays tun, oder Sie können es nach der Erstellung ändern. Es sollte wie folgt aussehen:

$array = [ 
    1 => [ // The key is now the usernumber 
     [ 
      'location' => 'l1' 
      'order' => 'o1' 
     ], 
     [ 
      'location' => 'l2' 
      'order' => 'o2' 
     ] 
    ], 
    2 => [ 
     [ 
      'location' => 'l3' 
      'order' => 'o3' 
     ], 
    ] 
]; 

Jetzt können Sie einfach greifen die verschiedenen Aufträge durch die Benutzernummer und Schleife durch sie:

$orders = $array[1]; // Get all orders from the user with usernumber 1 

foreach ($orders as $order) { 
    print_r($order); 
} 
+0

kannst du mir mit Alternationscode helfen? – rjcode

+0

Dies hat mir geholfen, spezifische Array mit CE-Nummer zu bekommen! – rjcode