#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.