сортировка массива без встроенной функции сортировки php

Представьте, что у вас есть абстрактный суперкласс, который является общим:

public abstract class Foo<? extends T> {}

И тогда у вас есть второй класс, который расширяет Foo с помощью общего бара, который расширяет T:

public class Second extends Foo<Bar> {}

Вы можете получить класс Bar.class в классе Foo, выбрав Type (из ответа bert bruynooghe) и вызывая его с помощью экземпляра Class:

Type mySuperclass = myFoo.getClass().getGenericSuperclass();
Type tType = ((ParameterizedType)mySuperclass).getActualTypeArguments()[0];
//Parse it as String
String className = tType.toString().split(" ")[1];
Class clazz = Class.forName(className);

Вы должны отметить эту операцию не является идеальным, поэтому рекомендуется кэшировать вычисленное значение, чтобы избежать множественных вычислений. Одно из типичных применений - это общая реализация DAO.

Окончательная реализация:

public abstract class Foo<T> {

    private Class<T> inferedClass;

    public Class<T> getGenericClass(){
        if(inferedClass == null){
            Type mySuperclass = getClass().getGenericSuperclass();
            Type tType = ((ParameterizedType)mySuperclass).getActualTypeArguments()[0];
            String className = tType.toString().split(" ")[1];
            inferedClass = Class.forName(className);
        }
        return inferedClass;
    }
}

Возвращаемое значение - Bar.class при вызове из класса Foo в другой функции или из класса Bar.

-1
задан newbie 14 July 2018 в 01:12
поделиться

1 ответ

У вас много синтаксических ошибок в коде.

Чтобы отсортировать массив с пользовательским сортированием, вы можете использовать это:

$array = array(1,3,5,6,7,8,11,12,17,11);
$arrayCount = count($array);  // no need to evaluate the count on every iteration of the for loop

for($i=0; $i < $arrayCount - 1; $i++)
{
    for($j = $i+1; $j < $arrayCount; $j++)
    {
        // if you want the array sorted from bigger to smaller number use `>` here
        if($array[$j] < $array[$i])
        {
            $temp = $array[$i];
            $array[$i] = $array[$j];
            $array[$j] = $temp;
        }
    }
}

print_r($array);

, который выводит:

Array
(
  [0] => 1
  [1] => 3
  [2] => 5
  [3] => 6
  [4] => 7
  [5] => 8
  [6] => 11
  [7] => 11
  [8] => 12
  [9] => 17
)

Теперь, чтобы получить желаемое значение из массива или false, если оно не существует, вы должны написать что-то вроде этого, используя встроенный метод array_search():

// Check if array contains a value 12, if it does return the index location in the array
// returns false if the value is not found
$index = array_search(12, $array); 

if($index === false)
{
    echo 'Value does not exist in the array.';
}
else
{
    echo 'Value '.$array[$index].' is at index '.$index.' in the array.';
}
0
ответ дан Ivan86 17 August 2018 в 12:06
поделиться
  • 1
    я хочу получить 12, потому что 12 больше числа два в массиве, вы можете мне помочь? – newbie 14 July 2018 в 01:11
  • 2
    @newbie Извините, я не понимаю, чего вы хотите. Из-за чего вы хотите получить 12? – Ivan86 14 July 2018 в 01:54