Привет! Я очень-очень начинающий, постигаю азы на ходу. Не стесняйтесь меня поправить, если я буду пользоваться неверной терминологией. Задача: найти в JSON все ноды, где parent_id == 'email', и из них получить значения id и label. Перебирать ВСЁ foreach я умею, а вот перебрать только определённые пока не научился. Пример JSON ниже: Спойлер: Пример кода Код (Text): [ { "id": "email_new_order", "label": "Новый заказ", "description": "Письма с деталями заказов отправляются по списку получателей в момент приёма новых заказов.", "parent_id": "email", "sub_groups": [], "_links": { "options": [ { "href": "https:\/\/my.domain\/wp-json\/wc\/v3\/settings\/email_new_order" } ] } }, { "id": "email_cancelled_order", "label": "Отменённый заказ", "description": "Письма об отмене заказов отправляются по списку получателей в момент присвоения заказам статуса Отменённых (если до этого они были в режиме удержания).", "parent_id": "email", "sub_groups": [], "_links": { "options": [ { "href": "https:\/\/my.domain\/wp-json\/wc\/v3\/settings\/email_cancelled_order" } ] } } ]
Перебираешь все, и ставишь условие, к примеру. Найденное складываешь в новый массив. Или array_filter, которая тоже самое сделает за тебя, но я не знаю, насколько ты знаком с типом callable, ну и самому на начальных этапах написать полезно.
Ни на сколько пока. Теории я пока в принципе не знаю, приходится в экстренных уловиях осваивать. Но как только допишу то, что пишу, пойду читать про callable и изучать, как работает array_filter. Был в 30 секундах до именно такой реализации, когда прочел ответ Получилось. Вот код, может, кому пригодится: PHP: foreach ($wc_settings as $value) { $wc_email_parent_id = $value->parent_id; $wc_email_label = $value->label; $wc_email_id = $value->id; if ($wc_email_parent_id == 'email') { echo $wc_email_id . ' → ' . $wc_email_label; } } Спасибо!
Вот так можно PHP: array_map(function($k) { if($k->parent_id == 'email') echo $k->id . ' → ' . $k->label; }, $wc_settings);
Я перед сном почитал про callable, понял Получается, что я таким образом могу в одной функции создать множество переменных из массива и потом ими пользоваться из функции? Потому что сейчас я их собираю так: PHP: if($_GET['id'] != 0){ $order = $woocommerce->get('orders/'.$_GET['id']); $order_id = $order->id; $order_total = $order->total; $order_customer_id = $order->customer_id; $order_status = $order->status; $order_customer_note = $order->customer_note; $order_billing_first_name = $order->billing->first_name; $order_billing_last_name = $order->billing->last_name; $order_billing_company = $order->billing->company; $order_billing_address_1 = $order->billing->address_1; $order_billing_address_2 = $order->billing->address_2; $order_billing_city = $order->billing->city; … } Я не знаю, как правильнее и почему. И при этом не понимаю, как сформулировать вопрос гуглу, чтобы получить ответ
Извините, я преждевременно задал вопрос, надо было сначала внимательно почитать про array_map и array_walk.
Конструируешь undefined переменные, если !: false --- Добавлено --- хочу чтобы пхп форматировал жесткий диск за глупую валидацию переменных