php - 在 POST 复选框值的数组上使用 preg_match

标签 php arrays checkbox preg-match

我遇到的问题是让 preg_match 对从我的表单返回的数组正常工作。

<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 1 (123)">
<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 2 (456)">
<input type="checkbox" name="receiver-check[]" class="checkbox-id" value="Username 3 (789)">

所以我希望对通过我的表单收到的值使用 preg_match。 这就是我的使用方式。

$msg_receivers = !empty($_POST['receiver-check']) && is_array($_POST['receiver-check']) ? $_POST['receiver-check'] : array();
    $receiverIds = array();
    foreach($msg_receivers as $receiver) {
        $receiverIds[] = preg_replace('/\((\d+)\)$/', "$1", $receiver);
    }
    $number_of_receivers = count($receiverIds);
    $while_count = 0;
    while($number_of_receivers >= ($while_count + 1)){
        $sql = <<< EOF
        INSERT INTO private_messages (
        message_subject,
        message_content,
        message_deliver,
        message_receive,
        message_status,
        message_datetime,
        message_to_stab
        )VALUES
        (?,?,?,?,'2',?,?);
EOF;
        $stmt = $mysqli->prepare($sql) or die ("Feil i database<br>" . $sql . "<br><b>Feilmelding:</b> " . $mysqli->error);
        $stmt->bind_param("ssiiii",$message_subject,$message_content, $_SESSION['user_id'],$receiverIds[$while_count],$message_datetime,$message_to_stab);
        $stmt->execute() or die("noe gikk galt");
        $msg_num_rows = $stmt->num_rows;
        if($msg_num_rows = 0){
            $msg = "Feilmelding: Klarte ikke å sende meldingen.";
        }
        else{
            $msg = "Meldingen har blitt sendt.";
        }
        $stmt->free_result();
        $stmt->close();
        $while_count ++;
    }

然后我使用 $msg_receiver_query 在 while 循环内的查询中分配一个值。 我目前在我的数据库中收到的是 0 和 1。没有别的。正确的 preg_match 是什么让我只输出括号内的数字?我的这个问题有没有更有效的解决方案?

最佳答案

看起来您不想匹配,您只想提取每个 $_POST['receiver-check'] 值的一部分 - 所以 preg_replace() 将是正确的函数。

$msg_receivers = !empty($_POST['receiver-check']) && is_array($_POST['receiver-check']) 
             ? $_POST['receiver-check'] : array();

$receiverIds = array();

foreach($msg_receivers as $receiver) {
  $receiverIds[] = preg_replace('/^.*\((\d+)\)$/', "$1", $reciever);
}

这应该会为您提供一组接收者 ID($receiverIds),例如:

array(
  [0] => 123, 
  [1] => 456, 
  [2] => 789
  );

关于php - 在 POST 复选框值的数组上使用 preg_match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31158653/

相关文章:

javascript - ASP MVC : Getting checked checkbox value and getting sum of input hidden when checkbox is checked

jquery - 从另一个复选框触发的复选框事件

javascript - 无法使用 DOM PHP 正确创建 xml

java - java - 如果可能,如何在java中仅使用一个for循环在数组中的特定元素之前添加元素

python - 创建非常大的二维数组而不会对 Python 中的代码运行时间产生重大影响

java - 如何让我的数组打印输入的重复一次? (JAVA)

d3.js - D3 : select only unchecked checkboxes

php - CakePHP:插入 MySQL ARCHIVE 引擎表

php - Laravel/JWT token token 何时被列入黑名单?

PHP 正则表达式不工作 - 在本地服务器上返回 NULL,但在其他服务器上工作正常