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

时间:2015-06-01 20:49:11

标签: 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 = $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/>";
  }
}

例如,我的数组有:1,1,2,3,4,2,4。

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

我想要:1,2,3,4

问题是2和4重复两次。 声明,&#34; if($ select_id!= $ last_select_id){&#34;正在停止&#34; 1&#34;从一开始就重复两次。这意味着我的if语句只能为前一次迭代存储$ last_select_id一次。我搜索了两天但找不到答案。我将不胜感激任何帮助!谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用几种方法。

在PHP中,您可以创建一个数组,并将每个条目放入数组中,因为它返回/ echoed / whatever。

$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”....

答案 1 :(得分:1)

PHP具有此功能

#form-wrapper { height:100%; flex: 1 1 auto; margin:0 auto; display:block; } #form-wrapper input{ display:block; }

文档here

在你的情况下,它将是

array_unique($array)

答案 2 :(得分:1)

我会在查询中使用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上的信息可在此处找到:http://www.mysqltutorial.org/mysql-distinct.aspx

从那里你可以执行以下操作输出所有id:

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

您还可以根据需要调整需求。