0

私は次のように2つの配列を持っています:

$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_id を提供していますが、他の配列はすべての user_id の対応するステータスを提供しています。SO 上記の両方の配列が常に等しい no. 要素の。今私が達成したいのは、user_ids配列の各要素 (user_id) に対して関数を呼び出すことです。しかしその前に、関数呼び出しで使用する 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++;
      }
    }
  }
4

5 に答える 5

2

これを行うには、ネストされた foreach は必要ありません。で簡単にできますarray_combine()。ID をキーとして、ステータスを値として使用して新しい配列を作成し、配列をループして、必要に応じて関数を呼び出します。

$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++;
    }
}

デモ!

于 2013-10-12T12:14:56.223 に答える
1

参照: 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);
}
于 2013-10-12T12:39:22.450 に答える
1

次のように、foreach が 1 つだけ必要です。

  $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++;
      }
  }
于 2013-10-12T12:15:12.673 に答える
1

もしかしてこんな?

$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); 
    }
  }
于 2013-10-12T12:13:49.477 に答える
1

あなたは近くにいます。両方の配列には偶数の値が含まれているため、次の$keyように要素をループしながら whileを取得できます。

 $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++;
      }
    }
  }

この方法では、2 番目の foreach ループは必要ありませんが、他の配列を同時に読み取るだけです。

于 2013-10-12T12:13:50.553 に答える