У меня два массива:
$user_ids = Array ( [0] => 159a8a6f1c00c5c4d5d0daaab2aa4227 [1] => a39777761f7816031aec676c80c3a8ad [2] => 348703d858f2f36f3fed0da29d04a905 [3] => 05ce989ed54dcd3ecca8af9e0e373c5c [4] => 2fe40d28847aad4f23ebf74cd93b7235 [5] => 717dce4998cc4f2b926a7a731c2ee651 [6] => 5d3dbc660f5896f790ad15cc40b14209 [7] => 41e400183bb54c2dd25dcd2f062a7ca9 [8] => a8e0f96c0f68242df08c91d58e14d5aa [9] => ddb29b7d35a24b5bad77bab752ec921b [10] => eaf925c5e43f387d7d0eba7ee45856e3 [11] => 5291d6ee6c5b577514e832f077a496ca [12] => 89f9e41b866c8e1c09e66e183a4b9265 [13] => 836d8a3e18888ee2b79b9636a8227c08 [14] => f9f3830700718df102c6c54bc004bdf9 [15] => 982e5d10baf398cb07a0ed388d8e1577 [16] => eb461f406d36a46db88f59f4c0b7b7f1 [17] => 9bfd556bd9ee849048690898a9d1ed3c [18] => 1f7ec7180354a8741d4e86949e5922fe [19] => 75cd2b01677ac49306caed58b26d4781 ) $user_status = Array ( [0] => enable [1] => disable [2] => enable [3] => disable [4] => disable [5] => disable [6] => disable [7] => enable [8] => disable [9] => disable [10] => disable [11] => disable [12] => disable [13] => enable [14] => disable [15] => disable [16] => disable [17] => enable [18] => disable [19] => enable )
Первый массив предоставляет user_ids, тогда как другой массив передает каждый статус user_id. ТАК, что оба вышеупомянутых массива всегда будут иметь равные нет. элементов. Теперь я хочу получить функцию для каждого из элементов (user_id) массива user_ids . Но перед этим я должен проверить, отключен ли статус этого user_id, который будет использоваться при вызове функции. Если статус user_id включен, функция не должна вызываться, и следующий user_id должен вступить в действие. Я не могу написать правильную логику для этой ситуации. Можете ли вы мне помочь? Заранее спасибо. Код PHP, который я пробовал, выглядит следующим образом:
$user_ids = explode(',', $request['items']); $user_statuses = explode(',', $request['user_status']); $count = 0; foreach ($user_ids as $user_id) { foreach ($user_statuses as $user_status) { if(user_status=='disable') { $objAdminUsers->UpdateUserStatus($user_id, $user_status); $count++; } } }
Для этого вам не нужен вложенный foreach. Это легко сделать с помощью array_combine()
. Создайте новый массив, используя ids как ключи и статусы как значения, а затем выполните цикл через массив и вызовите функцию по мере необходимости:
$array = array_combine($user_ids, $user_statuses); $array = array_map('trim', $array); // remove whitespaces foreach ($array as $id => $status) { if($status == 'disable') { $objAdminUsers->UpdateUserStatus($id, $status); $count++; } }
Демо!
Может быть, так?
$user_ids = explode(',', $request['items']); $user_statuses = explode(',', $request['user_status']); foreach ($user_statuses as $key => $user_status) { if(user_status=='disable') { $objAdminUsers->UpdateUserStatus($user_ids[$key], $user_status); } }
Вы близки. Поскольку оба массива содержат четное количество значений, вы можете получить $key
при циклическом перемещении элементов как таковых:
$user_ids = explode(',', $request['items']); $user_statuses = explode(',', $request['user_status']); $count = 0; foreach ($user_ids as $key => $user_id) { // $key contains the number between the brackets if($user_statuses[$key]=='disable') { $objAdminUsers->UpdateUserStatus($user_id, $user_statuses[$key]); $count++; } } }
Таким образом, вам не нужен второй цикл foreach, но вы просто читаете другой массив одновременно
Вам просто нужен один foreach, вот так:
$user_ids = explode(',', $request['items']); $user_statuses = explode(',', $request['user_status']); $count = 0; foreach ($user_ids as $key => $user_id) { if($user_status[$key]=='disable') { $objAdminUsers->UpdateUserStatus($user_id, $user_status[$key]); $count++; } }
См. http://phpfiddle.org/main/code/8ni-kjz
while ($match = current($user_status)) { if ($match == 'disable') { $id = key($user_status); objAdminUsers->UpdateUserStatus($user_ids[$id], $user_status[$id]); $count++; } next($user_status); }