Добавить / объединить массив JSON - PullRequest
0 голосов
/ 07 июня 2018

Я создаю инструмент, который измеряет веб-сайты для различных вещей.

Я собираю массив информации через каждую проверку.Я изложу приведенную ниже логику без нагрузки кода.

var report = [];


 //do a check for an ssl cert, if true...      
    report.push({
      "ssl": "true"
    });

//do a check for analytics tag, if true...
    report.push({
      "analytics": "true"
    });

//Then I run the google insights api and add results to the array...
    report.push(JSON.parse(data));

Мой результат такой ...

{
    "ssl": "true"
},
{
    "analytics": "true"
},
{
    "captchaResult": "CAPTCHA_NOT_NEEDED",
    "kind": "pagespeedonline#result",
    "responseCode": 200,

Теперь я пытаюсь прочитать ее

$report = file_get_contents("json.json");
$json = json_decode($report, true);

дает мне ..

[0] => Array (
    [ssl] => true
    )
[1] => Array (
    [analytics] => true
    )
[3=> Array ( [captchaResult] => CAPTCHA_NOT_NEEDED
[kind] => pagespeedonline#result
[responseCode] => 200)

К сожалению, я не могу определить, в каком порядке будут сгенерированы массивы 1 и 2 .. поэтому, если я попытаюсь повторить результат, подобный этому

echo $json[1]['ssl']

Iполучит Уведомление: неопределенный индекс: ssl.

В идеале я хотел бы получить массив следующим образом:

[0] => Array (
    [ssl] => true
    [analytics] => true
    [captchaResult] => CAPTCHA_NOT_NEEDED
    [kind] => pagespeedonline#result
    [responseCode] => 200
)

Так что я могу просто выводить как это, независимо от порядка:

  echo $json['ssl'];
  echo $json['analytics'];
  echo $json['captureResult']; etc etc

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, вы могли бы также использовать array_walk_recursive.

Поскольку результатом является один массив, вы должны убедиться, что не используете повторяющиеся значения для ключа.

$result = [];
array_walk_recursive($arrays, function ($value, $key) use (&$result) {
    $result[$key] = $value;
});

print_r($result);

Демо

Это даст вам:

Array
(
    [ssl] => 1
    [analytics] => 1
    [captchaResult] => CAPTCHA_NOT_NEEDED
    [kind] => pagespeedonline#result
    [responseCode] => 200
)

Вы можете получить свое значение, используя, например, echo $result['ssl'];

0 голосов
/ 07 июня 2018

Вы можете построить результат самостоятельно.

// base array default values
// we use $defaults because we assume the remainder of this task 
// will be performed for multiple websites inside of a loop
$defaults = array('ssl'=>false, 'analytics'=>false, 'captchaResult'=>'CAPTCHA_NOT_NEEDED', 'kind'=>'', 'responseCode'=>0) ;

// get a base copy of your array
$results = $defaults ;

// loop through your results
foreach($json as $values) {
    // get your key 
    $key = key($values) ;

    // get your value
    $results[$key] = $values[$key] ;
}

Это даст вам предсказуемый массив значений.Измените ваши значения по умолчанию на правильные значения

...