Я делаю вызов API для получения многомерного массива. Затем я использую array_filter, чтобы попытаться получить конкретный массив с определенной датой окончания. Код, который я использую, приведен ниже:Сравнение строк при анонимной функции при использовании строковой переменной
$api_call = "287/terms";
$terms_json = curl_exec(makeAPIConnection($api_call));
$all_terms = json_decode($terms_json);
if(!is_array($all_terms)) { return NULL; }
// Getting current date and formatting for comparison
$current_date = date_create('2017-05-25');
$date_formatted = date_format($current_date, 'Y-m-d');
// Getting the current term
$current_term = array_filter($all_terms, function($a) {
if(substr($a->EndDate, 0, 10) === $date_formatted) {
return true;
}
return false;
});
echo "<pre>";
var_dump($date_formatted) . "<br";
var_dump($current_term) . "<br";
echo "</pre>";
Этот код возвращает это.
string(10) "2017-05-25"
array(0) {
}
Если я вместо этого использовать строковый литерал в анонимной функции ...
$current_term = array_filter($all_terms, function($a) {
if(substr($a->EndDate, 0, 10) === '2017-05-25') {
return true;
}
return false;
});
Я получаю это.
string(10) "2017-05-25"
array(1) {
[3]=>
object(stdClass)#4 (7) {
["AcadSessionId"]=>
int(287)
["Code"]=>
string(4) "Qtr4"
["Description"]=>
string(20) "Quarter 4/Semester 2"
["EndDate"]=>
string(19) "2017-05-25T00:00:00"
["Id"]=>
int(729)
["Name"]=>
string(20) "Quarter 4/Semester 2"
["StartDate"]=>
string(19) "2017-03-13T00:00:00"
}
}
Может ли кто-нибудь сказать мне, почему использование строковой переменной не выполняется, и используется строковый литерал?