У меня есть следующий массив объектов, возвращенный из вызова мыла:
$result = $this->soapClient->__soapCall($method, $arguments);
var_dump($result);
object(stdClass)#4 (1) {
["Jobs_GetResult"]=> object(stdClass)#5 (3) {
["Jobs"]=> array(4) {
[0]=> object(stdClass)#7 (19) {
["JobID"]=> int(55082846)
["JobName"]=> string(18) "Fix xyz"
}
}
["Errors"]=> object(stdClass)#10 (2) {
["Result"]=> int(0)
["Message"]=> string(0) ""
}
["RecordCount"]=> int(1)
}
}
Я хочу проверить, есть ли какие-либо ошибки - это легко, когда известен ключ родительского массива, например:
if ($result->Jobs_GetResult->Errors->Result > 0){
// display message
}
Проблема в том, что я не знаю, какое имя будет иметь ключ массива верхнего уровня для большинства вызовов, поскольку я использую общий метод - в приведенном выше примере это Jobs_GetResult, поэтому все вышесказанное будет работать.
В случаях, когда ключ массива верхнего уровня неизвестен, как мне проверить, нет ли возвращенных ошибок?
Как правило, имя ключа родительского массива - это обычно имя вызова метода с добавленным к нему Result. поэтому я думал сделать что-то вроде:
if ($result->$method . 'Result'->Errors->Result > 0){
// display message
}
Но очевидно, что приведенный выше синтаксис неверен. Любой знает, как вывести значение $method и связать его с $result и добавить его с помощью Result.
Есть ли другой способ проверить, больше ли результат массива ошибок 1, не зная, что такое ключ родительского массива?






Попробуй это:
$result = $this->soapClient->__soapCall($method, $arguments);
$firstKey = key($result);
if (!empty($firstKey) && !empty($result->{$firstKey}->Errors->Result)) {
// display message
}
Можете ли вы использовать key() на объекте? По инструкции не похоже.
Сначала вы можете преобразовать объект Std в массив, тогда он будет работать так, как вы ожидаете.
@jeroen На самом деле вам не нужно использовать его, просто попробовал его на объекте, и он работает. Я тоже был настроен скептически
@RiggsFolly Nice, я этого не знал. Просто попробовал сам :-)
Если вы настроены скептически, просто приведите $ result к массиву: $firstKey = key((array)$result);
Даниэль: Я был настроен скептически и поэтому проверил это. Как только я обнаружил, что это сработало, я проголосовал за ваш ответ.
Может быть, с этой работой справится простой foreach? Если сделать
foreach($result as $key => $value) {}можно получить ошибку в$value->Errors->Resultнет?