计算数组值会返回额外的结果

时间:2014-03-25 23:30:15

标签: php arrays count

我目前正在为我的网站开发一个消息传递系统,允许人们向最多9个人发送消息,(10个包括作者)。我在我的数据库上有一个名为'对话'包含以下字段:

  • convo_id
  • 作者
  • recipient_1
  • recipient_2
  • recipient_3
  • recipient_4
  • recipient_5
  • recipient_6
  • recipient_7
  • recipient_8
  • recipient_9
  • 标题
  • 时间戳

然后我有一张名为“private_messages'这些领域:

  • MESSAGE_ID
  • convo_id
  • 作者
  • 时间戳
  • 消息

所以对话中的所有参与者都存储在对话表中,实际的消息存储在p_m表中。

我在表单上为收件人使用单个输入字段,名称用逗号分隔,然后在提交的另一侧包含以下代码:

$recipients = explode(",", $_POST['recipient']);
$duplicate = array($recipients[0],$recipients[1],$recipients[2],$recipients[3],$recipients[4],$recipients[5],$recipients[6],$recipients[7],$recipients[8],$recipients[9],$recipients[10]);
$unique = array_values(array_unique($duplicate));
$result = count($unique);
echo "$result<br>";

我遇到的问题是,当我回复$ result时,我会得到一个额外的计数。如果我将该字段留空,则它正确地表示0,但是任何条目都会返回2,这样就会在验证后面给我一个异常。

我完全被难过了,任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

我认为你的问题是你的重复步骤

// assuming $_POST['recipient'] = bob,fred

$recipients = explode(",", $_POST['recipient']);
// $recipients is array ['bob','fred']
$duplicate = array($recipients[0],$recipients[1],$recipients[2],$recipients[3],$recipients[4],$recipients[5],$recipients[6],$recipients[7],$recipients[8],$recipients[9],$recipients[10]);
// $duplicate is ['bob','fred',null, null, null, null, null, null, null, null, null]
$unique = array_values(array_unique($duplicate));
// $unique is ['bob','fred',null]
$result = count($unique);
//$result = 3
echo "$result<br>";

Intead do:

// assuming $_POST['recipient'] = bob,fred

$recipients = explode(",", $_POST['recipient']);
// $recipients is array ['bob','fred']
$unique = array_values(array_unique($recipients));
// $unique is ['bob','fred']
$result = count($unique);
//$result = 2
echo "$result<br>";

说明问题的键盘:http://codepad.org/YZSvieEr