Создать новый массив путем фильтрации результатов моего массива по значению ключа - PullRequest
1 голос
/ 03 апреля 2020

У меня есть эта переменная $office, которая будет выводиться, когда print_r:

{
  "total": 3,
  "results": [
    {
      "id": "4",
      "blog_id": "11",
      "office_name": "Japan",
      "office_status": "inactive"
    },
    {
      "id": "5",
      "blog_id": "11",
      "office_name": "USA",
      "office_status": "active"
    },
    {
      "id": "6",
      "blog_id": "11",
      "office_name": "London",
      "office_status": "inactive"
    },
    }

}

Теперь я хочу создать новую переменную, в которой будет отображаться только переменная с office_status из active, мой желаемый результат:

{
      "total": 1,
      "results": [
        {
          "id": "5",
          "blog_id": "11",
          "office_name": "",
          "office_status": "active"
        },
        }

    }

Это то, что я пробовал до сих пор, но он по-прежнему возвращает весь массив:

$v= "active";
$k = "office_status";
foreach($offices as $k => $v) {
    $offices_active[$k] = array_filter($v);
}
print_r($offices_active);

Пожалуйста, помогите. Спасибо

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

На самом деле это можно сделать разными способами. Один из способов сделать это следующим образом.

<?php
$object = '{"total":3,"results":[{"id":"4","blog_id":"11","office_name":"Japan","office_status":"inactive"},{"id":"5","blog_id":"11","office_name":"USA","office_status":"active"},{"id":"6","blog_id":"11","office_name":"London","office_status":"inactive"}]}';
$offices = json_decode($object,true);
$new = array_filter($offices['results'], function ($var) {
    return ($var['office_status'] == 'active');
});

$expected['total'] = count($new);
$expected['results'] = $new;
echo json_encode($expected);
?>

РАБОЧИЙ ДЕМО: https://3v4l.org/NXZvQ

0 голосов
/ 03 апреля 2020

Этот код помогает получить данные по значению статуса

<?php

$src_ar = '{"total":3,"results":[{"id":"4","blog_id":"11","office_name":"Japan","office_status":"inactive"},{"id":"5","blog_id":"11","office_name":"USA","office_status":"active"},{"id":"6","blog_id":"11","office_name":"London","office_status":"inactive"}]}';
$office_info = json_decode($src_ar,true);

$inactive_array = sort_by_office_status('inactive', $office_info['results']);

print_r($inactive_array);

$active_array = sort_by_office_status('active', $office_info['results']);

print_r($active_array);


function sort_by_office_status( $office_status, $result_array ) {
    $return_ar =array();

    if( !empty( $result_array ) ) {
        foreach( $result_array as $res ) {
            if( $res['office_status'] == $office_status ) {
                $return_ar['results'][] = $res;
            }
        }
    } else {
        $return_ar['results'] = array();
    }

    $result_count = count( $return_ar['results'] );

    $return_ar['total'] = $result_count;

    return $return_ar;
}
?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...