PHP-如何存储不同的值,以便while循环不会重复前面的循环

PHP-如何存储不同的值,以便while循环不会重复前面的循环,php,Php,我希望数组只回显不同的值。 以下是迄今为止我的php代码: $get_con = mysqli_query($con, "SELECT * FROM messages WHERE from_id='$my_id' OR to_id='$my_id' "); $last_select_id = ""; while ($run_con = mysqli_fetch_array($get_con)) { $from_id = $run_con['from_id']; $to_id = $ru

我希望数组只回显不同的值。 以下是迄今为止我的php代码:

$get_con = mysqli_query($con, "SELECT * FROM messages WHERE from_id='$my_id' OR to_id='$my_id' ");
$last_select_id = "";

while ($run_con = mysqli_fetch_array($get_con)) {
  $from_id = $run_con['from_id'];
  $to_id = $run_con['to_id'];

//This just ensures that it echos the other person's id and not my own
  if ($from_id == $my_id) { 
  $select_id = $to_id;
  } else {
  $select_id = $from_id;}

//Trying to save the iterations
  if ($select_id != $last_select_id) {
  $last_select_id = $select_id;
  echo "$select_id<br/>";
  }
}
$get_con=mysqli_query($con,“从消息中选择*,其中FROM_id='$my_id'或to_id='$my_id');
$last_select_id=“”;
而($run\u con=mysqli\u fetch\u数组($get\u con)){
$from_id=$run_con['from_id'];
$to_id=$run_con['to_id'];
//这只是确保它与其他人的id相呼应,而不是与我自己的id相呼应
如果($from_id=$my_id){
$select_id=$to_id;
}否则{
$select\u id=$from\u id;}
//试图保存迭代
如果($select\u id!=$last\u select\u id){
$last\u select\u id=$select\u id;
回显“$select_id
”; } }
例如,我的数组有:1,1,2,3,4,2,4

我的代码将返回为:1、2、3、4、2、4

我想要:1,2,3,4

问题是2和4重复了两次。
语句“if($select_id!=$last_select_id){”正在阻止“1”在开始时重复两次。这意味着我的if语句在上一次迭代中只能存储$last_select_id一次。我已经搜索了两天,但找不到答案。我将感谢您的帮助!谢谢。

PHP为此提供了一个函数

array\u unique($array)

文件

在你的情况下是这样的

$temp_array = array_unique(mysqli_fetch_array($get_con));
foreach($temp_array as $temp) {
    *stuff*
}

PHP为此提供了一个函数

array\u unique($array)

文件

在你的情况下是这样的

$temp_array = array_unique(mysqli_fetch_array($get_con));
foreach($temp_array as $temp) {
    *stuff*
}

有几种方法可以使用

在PHP中,您可以创建一个数组,并将每个条目以返回/回送/任何形式放入数组中

$array = array( 1,1,2,3,4,4,5 );
$seen = array();

foreach ( $array as $arr ) {
    if ( !in_array( $arr, $seen )) {
        echo $arr.PHP_EOL;
        $seen[] = $arr;
    }
}
当然,在数组中最好不要有重复的条目。在PHP中,可以使用array_unique()来实现这一点:

$array = array( 1,1,2,3,4,4,5 );
$array = array_unique( $array );
foreach ( $array as $arr ) echo $arr.PHP_EOL;

但可能比这更好的是,首先在数组中不要有重复项。请查看SQL中的“SELECT DISTINCT”以了解这一点……

有几种方法可以使用

在PHP中,您可以创建一个数组,并将每个条目以返回/回送/任何形式放入数组中

$array = array( 1,1,2,3,4,4,5 );
$seen = array();

foreach ( $array as $arr ) {
    if ( !in_array( $arr, $seen )) {
        echo $arr.PHP_EOL;
        $seen[] = $arr;
    }
}
当然,在数组中最好不要有重复的条目。在PHP中,可以使用array_unique()来实现这一点:

$array = array( 1,1,2,3,4,4,5 );
$array = array_unique( $array );
foreach ( $array as $arr ) echo $arr.PHP_EOL;

但可能比这更好的是在数组中一开始就没有重复项。请查看SQL中的“SELECT DISTINCT”…

我会在查询中使用
SELECT DISTINCT
语句:

//I'm assuming you have a column called "id"
$get_con = mysqli_query($con, "SELECT DISTINCT id FROM messages WHERE from_id='$my_id' OR to_id='$my_id' ");
有关
SELECT DISTINCT
的信息可在此处找到:

从那里,您只需执行以下操作即可输出所有id:

foreach($id in $get_con){ 
    echo $id
}

您也可以根据自己的需要进行调整。

我会在查询中使用
SELECT DISTINCT
语句:

//I'm assuming you have a column called "id"
$get_con = mysqli_query($con, "SELECT DISTINCT id FROM messages WHERE from_id='$my_id' OR to_id='$my_id' ");
有关
SELECT DISTINCT
的信息可在此处找到:

从那里,您只需执行以下操作即可输出所有id:

foreach($id in $get_con){ 
    echo $id
}

您也可以根据需要进行调整。

您可以在迭代之前进行排序吗?我尝试在迭代之前进行排序,但我无法,因为while循环不会存储变量。(可能)有用信息:我正在尝试创建一个消息系统。因此id对应于一个人。当你进入消息页面时,你会看到与你交谈过的用户列表。单击该用户后,你会看到以前的所有对话。我只想显示一次该用户的姓名。在这种情况下,我只需使用
选择DISTINCT
语句。您只会得到不同的ID。不幸的是,ID是自动递增的,所以它已经是不同的。我的数组中有四列:“ID”(主和自动递增)、“from_user”、“to_user”、“message”。每次用户发送消息时,mysql都会为登录的用户(my_ID)提供第一个查询然后显示另一个用户(选择\ id)。有时“我的\ id”是发送私人消息的用户(来自\用户),但有时“我的\ id”是接收私人消息的用户(来自\用户)。我无法使用distinct,因为值位于两个不同的列上(来自\用户和\用户)
SELECT DISTINCT
仍将返回不同的值,尽管它们来自两个不同的列。它不会返回
1,1,2,3,4,2,4
,而是返回
1,2,3,4
。您能够在迭代之前进行排序吗?我尝试在迭代之前进行排序,但无法执行,因为while循环不会存储v可变的(也许)有用信息:我正在尝试创建一个消息系统。因此id对应于一个人。当你进入消息页面时,你会看到与你交谈过的用户列表。单击该用户后,你会看到以前的所有对话。我只想显示一次该用户的姓名。在这种情况下,我只需使用
选择DISTINCT
语句。您只会得到不同的ID。不幸的是,ID是自动递增的,所以它已经是不同的。我的数组中有四列:“ID”(主和自动递增)、“from_user”、“to_user”、“message”。每次用户发送消息时,mysql都会为登录的用户(my_ID)提供第一个查询然后显示另一个用户(选择\ id)。有时“我的\ id”是发送私人消息的用户(来自\用户),但有时“我的\ id”是接收私人消息的用户(来自\用户)。我无法使用distinct,因为值位于两个不同的列上(来自\用户和\用户)
SELECT DISTINCT
仍将返回DISTINCT值,尽管它们来自两个不同的列。与其返回
1,1,2,3,4,2,4
,不如返回
1,2,3,4
。我无法使用DISTINCT值,因为这些值位于两个不同的列上……请查看下面的注释有关更多信息的主要问题:)@KhoaTran它仍然可以工作。
选择DISTINCT
接受条件输入。请查看我提供的链接并尝试一下;)我无法使用DISTINCT,因为值位于两个dif上