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


Find key in one array according to another value from another array in PHP

我从一个应用程序收到了这些数据。我的参数列表:

  1. catids=1,2,3
  2. subscriptions=1,1,0[0=按此顺序保持订阅和1=取消订阅catids]
  3. appuser_id=XXX

现在我必须根据收到的数据更新我的订阅表。模式如下:

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

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

  1. 获取值为1的所有订阅
  2. 找出步骤1中找到的值的相应catid
  3. 从表中删除这些条目

我只能走到第一步。我想不出一种方法来将步骤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数组中的一个类别?

您需要记住您的密钥:

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

然后$deleteSublist将是一个数组,它将数组的所有id作为密钥。

foreach($deleteSublist as $key => $value) {
   // Delete $cat[$key]
}
$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);
}

这里有一种更简单的方法

$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 );