Я возвращаю этот массив объектов из вызова API так. Обратите внимание, что $ результат представляет собой массив из массивов с $ результата [данные] холдинговый список TODO объектов и привести [успех] держит статус API вызова:Ссылка на элемент в цикле foreach с использованием php unset
array(9) { [0]=> object(stdClass)#3 (5) { ["todo_id"]=> string(10) "1480430478" ["title"]=> string(13) "Check Printer" ["description"]=> string(8)
"Room 233" ["due_date"]=> string(10) "11/29/2016" ["is_done"]=> string(4) "true" } [1]=> object(stdClass)#4 (5) { ["todo_id"]=> string(10) "148043046" ["title"]=> string(18) "Doctor Appointment" ["description"]=> string(7)
"@4pm. " ["due_date"]=> string(10) "11/30/2016" ["is_done"]=> string(4) "true" }
etc..
сортировать массив с usort штрафом, а затем я хочу прибегнуть в поле «is_done» и поместите их внизу списка todo в порядке даты. PHP, чтобы сделать это:
//Sort by is_done
foreach($result[data] as $arrayElement) {
foreach($arrayElement as $valueKey => $value) {
if(($valueKey == 'is_done') && ($value == 'true')){
$temp = $arrayElement;
//delete this particular object from the $array
unset($result[data][$arrayElement]);
array_push($result[data], $temp);
}
}
}
Проблема У меня есть мои законченные элементы теперь в конце массива, но они также по-прежнему в их исходное положение. Сброс не работает. Я пробовал все варианты ссылки на элемент $ result [data] безрезультатно. Это, вероятно, что-то простое, но мне нужна помощь, если это возможно. Поиск в Google и проверка этого сайта не показывают примеров отмены в этом типе ситуации. Заранее спасибо.
Update: после нанесения раствора colburton в API-интерфейс теперь возвращается эта структура данных:
object(stdClass)#3 (6) { ["2"]=> object(stdClass)#4 (5) { ["todo_id"]=> int(1480698596) ["title"]=> string(7) "Test #4" ["description"]=> string(4) "test" ["due_date"]=> string(10) "12/02/2016" ["is_done"]=> string(5) "false" } ["3"]=> object(stdClass)#5 (5) { ["todo_id"]=> string(10) "1480617975" ["title"]=> string(13) "Check Printer" ["description"]=> string(4)
"Test" ["due_date"]=> string(10) "12/06/2016" ["is_done"]=> string(5) "false" } ["5"]=> object(stdClass)#6 (5) { ["todo_id"]=> int(1481136023) ["title"]=> string(9) "Todo item" ["description"]=> string(7) "test123" ["due_date"]=> string(10) "01/19/2017" ["is_done"]=> string(5) "false" } etc...
В конце разговора я сделать
//json_decode the result
$result = @json_decode($result);
//check if we're able to json_decode the result correctly
if ($result == false || isset($result->success) == false) {
throw new Exception('Request was not correct');
}
//if there was an error in the request, throw an exception
if ($result->success == false) {
throw new Exception($result['errormsg']);
}
//if everything went great, return the data
return $result->data;
}
, а затем в основной программе Я ссылаюсь на $ result как
$result = $todo_items[0];
И вот тут происходит фатальная ошибка.
Update II: Хотел добавить, что вы тогда должны индексировать массив со
$result['data'] = array_values($result['data']);
Я читал here, что это ошибка в json_decode. Спасибо за помощь ....
Спасибо. но теперь я получаю сообщение об ошибке «Неустранимая ошибка: нельзя использовать объект типа stdClass as array» в строке 91 моей программы todo_client, где я ссылаюсь на $ result как «$ result = $ todo_items [0];» Перед этим я использую json_decode. Я где-то читал об удалении элементов и с помощью json_decode вам нужно переиндексировать массив? – alan
Вы можете «переиндексировать» с помощью array_values. Например. $ result ['data'] = array_values ($ result ['data']); после петель. – colburton