根据PHP中另一个数组的另一个值在一个数组中查找键

时间:2013-02-17 17:12:20

标签: php arrays

我从应用中收到了这些数据。我的参数列表:

  1. catids = 1,2,3
  2. subscriptions = 1,1,0 [0 =保持订阅,1 =按此顺序取消订阅catids]
  3. appuser_id = XXX
  4. 现在我必须根据收到的数据更新我的订阅表。架构如下:

    --cat_id--appuser_id
      1     |     10    |
      2     |     10    |
      3     |     10    |   
      4     |     20    |
      5     |     20    |
    ---------------------
    

    那么如何在考虑查询性能的情况下做到这一点呢?我能想到的方法是:

    1. 获取值为1的所有订阅。
    2. 找出步骤1中找到的值的相应catids。
    3. 从表格中删除这些条目。
    4. 我只能达到第1步。我想不出一种方法可以将步骤1中找到的条目与它们各自的catid相匹配。

      $cat = '1,2,3';
      $subs = '1,1,0';
      
      $catA = explode(',',$cat);
      $subsA = explode(',',$subs);
      
      $deleteSubList = array();
      foreach($subsA as $v){
          if($v == 1){
              array_push($deleteSubList,$v);
          }
      }
      
      print_r($deleteSubList);
      

      这给了我Array ( [0] => 1 [1] => 1 )。我怎么知道它属于$catA数组中的一个类别?

3 个答案:

答案 0 :(得分:1)

你需要记住你的钥匙:

foreach($subsA as $key => $v){
        if($v == 1){
            $deleteSublist[$key] = $v;
        }
    }

然后$ deleteSublist将是一个数组,其中包含数组的所有ID。

foreach($deleteSublist as $key => $value) {
   // Delete $cat[$key]
}

答案 1 :(得分:1)

$cat = '1,3,3';
$subs = '1,1,0';

$catA = explode(',', $cat);
$subsA = explode(',', $subs);

for ($i = 0; $i <= count($subsA); $i++) {
    if ($subsA[$i] == 1) {
        $deleteSubList[$catA[$i]] = $subsA[$i];
    }
}
print_r($deleteSubList);

并删除:

foreach($deleteSubList as $key => $value) {
    mysql_query("DELETE FROM tbl WHERE cat_id = " . $key);
}

答案 2 :(得分:0)

这是一种更简单的方法

$deleteSubList = array_filter( array_combine( $catA, $subsA ) );

$sql = sprintf( "delete from table where cat_id in(%s) and appuser_id=%s", implode( ',' array_keys( $deleteSubList ) ), $appuser_id );