как сопоставить версии каждого значения массива в php?

#php #arrays #compare

#php #массивы #Сравнить

Вопрос:

У меня есть два массива, которые мне нужно сравнить с оператором <= . Я думал, что простой способ попробовать и сделать это — использовать version_compare но я не уверен, что A. Это лучший метод и B. На самом деле это сравнение правильных значений.

Для того, чтобы version_compare заработал, я разбиваю массив.

 //Original arrays.

a$ = array( 0 => "ajax dropdown0.1.5", 1 => "hello dolly1.6", 2 => "test4.5");
b$ = array( 0 => "ajax dropdown0.1.4", 1 => "hello dolly1.6", 2 => "test4.6");

//implode into string

$a_implode = implode( "," , $a );
$b_implode = implode( "," , $b );

//compare version

if (version_compare($a_implode, $b_implode, '<=')){
                    echo 'We have a problem';
                    }
  

Кажется, это работает, но я понятия не имею, действительно ли это сравнение правильных значений, например, test4.5 должно сравниваться только с test4.6 (а не с другими строковыми значениями), также я не уверен, как выводить какие-либо совпадения, если version_compare возвращает true.

Комментарии:

1. Ваш взорванный массив не будет соответствовать соглашению о нумерации версий PHP, поэтому эта функция не будет делать то, что вы хотите. Вы должны сравнивать версии отдельных компонентов отдельно.

2. Я не совсем понимаю, что вы пытаетесь здесь сделать. Что означает выполнение условия if? Есть ли проблема, если какая-либо из них не удовлетворяет сравнению версий, или если все они не удовлетворяют?

3. Если $a меньше или равно $ b, верните $a. Ожидайте, что я знаю, что это неправильно, поскольку я должен сравнивать каждое значение в массиве для соответствия тексту, а затем сравнивать номер версии.

Ответ №1:

     foreach( array_keys( $a ) AS $key ) {            
        if( version_compare($a[$key], $b[$key], '<=')) { print "we have a problem with: " . $a[$key] . "n"; }
    }
  

Ответ №2:

Я создал простой класс для вас, чтобы решить вашу проблему так же просто, как и ее posibble.

файл класса (class.myversion.php )

 <?php
class MyVersion
{
    private $_version;
    private $_name;

    public function __construct($_name, $_version)
    {
        $this->_version = $_version;
        $this->_name = $_name;
    }
    public function getVersion()
    {
        return $this->_version;
    }
    public function getName()
    {
        return $this->_name;
    }
}
?>
  

И тестовый файл (test.php )

 require 'class.myversion.php';

$a = Array();
$b = Array();

$a[] = new MyVersion("ajax dropdown", 15); // 15 means 0.1.5
$a[] = new MyVersion("hello dolly", 16);
$a[] = new MyVersion("test", 45);

$b[] = new MyVersion("ajax dropdown", 14); // 14 means 0.1.4
$b[] = new MyVersion("hello dolly", 16);
$b[] = new MyVersion("test", 46);

for($i = 0; $i < sizeof($a); $i  )
    if($a[$i]->getVersion() < $b[$i]->getVersion())
        echo "(".$a[$i]->getName().")needs to get Updated. Required version: ".$b[$i]->getVersion()."<br />";
    elseif($a[$i]->getVersion() > $b[$i]->getVersion())
        echo "(".$b[$i]->getName().")needs to get Updated. Required version: ".$a[$i]->getVersion()."<br />";
?>
  

Вот и все! Если вы думаете, что это сложно понять, я могу объяснить это, но я думаю, что это достаточно легко понять.

Комментарии:

1. Я сожалею, что это выше моего уровня квалификации, я получаю сообщение об ошибке Call to a member function getVersion() on a non-object

2. Вы должны создать файл класса и вызвать его с помощью функции require.