foreach() 只返回带有 json_decode() 的最后一项

尝试使用 foreach() 循环从解码的 JSON 中返回 Google Fonts系列,

但我只得到最后一个系列,而不是全部。


我一直在挣扎,谷歌搜索,尝试了我知道/发现的一切,没有结果!

这是代码,我在 WordPress 中使用它。


<?php

/**

 * Get Google Fonts.

 */

public function get_google_fonts() {

    $google_api   = 'https://www.googleapis.com/webfonts/v1/webfonts?key=MY-API-KEY';

    $font_content = wp_remote_get( $google_api, array( 'sslverify' => false ) );

    $content      = json_decode( $font_content['body'], true );


    $items = $content['items']; // I've tried (array) $content['items'];


    // I've tried $i = 0;


    // I've tried $families = array();


    foreach ( $items as $key => $value ) {

        $families = $value['family'];

        BugFu::log( $families, false ); // Correct returning all families.


        // I've tried $i++;

    }

    return array( $families ); // OR return $families; Returning last family.

}

非常感谢任何帮助。

在此先感谢您的时间 :)


慕侠2389804
浏览 144回答 3
3回答

人到中年有点甜

在您foreach每次输出$families.但返回只返回最后一个$families。

慕丝7291255

$families每次循环时都会覆盖变量:$families = $value['family'];为了向数组添加元素,您需要这样做:$families[] = $value['family'];这样,每次循环时,$value['family']都会将其添加到$families数组中。编辑$families在foreach循环之前将变量初始化为空数组可能也不错。因为如果您的 json 中没有任何值,该函数将返回null.$families = [];foreach ($items as $key => $value) { ... }return $families;

慕桂英3389331

这是因为当所有系列都已循环并且 $families 获得最后一个值时,您将在 foreachloop 之外返回字体,因此只返回最后一个值
打开App,查看更多内容
随时随地看视频慕课网APP