Как получить первые 3 позиции (значения) из массива в PHP, включая дубликаты - PullRequest
1 голос
/ 25 февраля 2020

У меня есть отсортированный массив в порядке убывания, например, со значениями 100 , 98, 96, 90 .... и я использую foreach() l oop для итерации по массиву и использую if condition с ограничением 3, например `

foreach($array as $arr){
if(loop_counter<3)
{ 
 echo 'something'; 
}}

, чтобы получить верхние 3 позиции. но проблема в том, что если существуют два одинаковых значения, таких как 100 , 98, 98, 96, 90 . ., то пределы должны увеличиться с 3 до 4, так что в позиции 2 существуют два значения 98, 98 и позиция 3 содержит значение 90 вместо 2nd 98 помните, что мне нужны оба одинаковых номера на одной позиции, например, два студента с одинаковыми отметками стоят на одной позиции. заранее спасибо

Ответы [ 4 ]

1 голос
/ 25 февраля 2020

Проверьте решение для этого:

$array = [100, 98, 96, 96, 95];
$count = 0;
$length = count($array);
foreach($array as $key => $arr){
  if($count<3)
  { 
     echo $arr . ", ";
     if(($length != $key + 1) && $array[$key] != $array[$key + 1]) 
     {
        $count++;         
     }
  }
}
0 голосов
/ 28 февраля 2020

Также, это будет хорошо работать

<?php

$array = array(100,98,98,98,96,96,90);
$arr_counter = 0;
$items = array();
foreach($array as $arr){


   $items[] = $arr; //capture all values in this cycle

   #get all values that are repeating then add it to a new array
   $nrr = array_unique(array_diff_assoc($items, array_unique($items)));

    #If the number is repeating again dont add to our counter $arr_counter
   if (!in_array($arr, $nrr)) {  $arr_counter = $arr_counter+1; }  

   echo $arr;  echo ' | position '; echo $arr_counter; echo '<br>';

   if  ($arr_counter == 3) { die(); }
} 


?> 

Результат: php песочница

100 | position 1
98 | position 2
98 | position 2
98 | position 2
96 | position 3
0 голосов
/ 25 февраля 2020

Я не уверен, что это то, что вы ищете, но вы можете использовать код удара в качестве примера

    $a = [100, 100, 98, 97, 97, 97, 96];

    foreach(array_slice(array_count_values($a), 0, 3, true) as $number => $repeat) {
        var_dump(array_fill(0, $repeat, $number)); 
    }

Результат

array(2) {
  [0]=>
  int(100)
  [1]=>
  int(100)
}
array(1) {
  [0]=>
  int(98)
}
array(3) {
  [0]=>
  int(97)
  [1]=>
  int(97)
  [2]=>
  int(97)
}

Live Sandbox

0 голосов
/ 25 февраля 2020

Посмотрите на это

   $len=3;
    $selectedArray=[]
    $i = 0;

    while($i <= $len) {
 array_push($selectedArray, $array[$i]);

    if(in_array($array[$i], $array))
    {$len++;
    }

        $i++;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...