代码之家  ›  专栏  ›  技术社区  ›  PlayHardGoPro

如何从JSON文件[重复]中仅获取“标题”

  •  1
  • PlayHardGoPro  · 技术社区  · 6 年前

    我有这个结构(它是 stdClass标准 ):

      stdClass Object
    (
        [TitleA] => stdClass Object
            (
                [key1] => value1
                [key2] => value2
                [key3] => value3
            )
    
        [TitleB] => stdClass Object
            (
                [key1] => value1
                [key2] => value2
            )
    )
    

    编辑1 由于@John Ellmore,我将readen json转换为关联数组,所以现在我有了这个:

    Array
    (
        [TitleA] => Array
            (
                [key1] => value1
                [key2] => value2
                [key3] => value3
            )
    
        [TitleB] => Array
            (
                [key1] => value1
                [key2] => value2
            )
    )
    

    我能够循环并通过 keys values 但我需要确定currenct循环itraction是否是最后一个循环。

     $myFile  = fopen($sourceFile, "r") or die("Unable to open the file !");
     $content = json_decode(fread($myFile, filesize($sourceFile)));
     fclose($myFile);      
     foreach( $content as $keys => $value ) {
      //This loop allows me to work around with the keys     
    
       foreach($value as $index => $key) {
          // And this loop allows me to work with the values
       }  
     }
    

    我需要做的是确定我什么时候在做最后一个 title 在我的循环中。我想我可以 php end() function 这样可以在每次迭代中获得最后一个关键点。但我不能同样得到最后一个头衔的名字。
    所以我可以将最后一个与当前一个进行比较,我就知道我是否正在循环通过最后一个。

    是否可以以某种数组或类似的方式列出它们?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Syscall - leaving SO... Juhzuri    6 年前

    你可以使用 end() key() 获取对象的最后一个标题。

    $content=json_decode('{"titleA":{"key1":"val1","key2":"val2","key3":"val3"},"titleB":{"key1":"val1","key2":"val2"}}');
    
    end($content); // place the cursor on the last position
    $last_title = key($content); // get the key of the current position
    // here, $last_title = 'titleB'
    
    foreach( $content as $keys => $value ) {
    
        $is_last_title = $keys == $last_title;
    
        var_dump($keys, $is_last_title);
    
        //This loop allows me to work around with the keys
    
        foreach($value as $index => $key) {
          // And this loop allows me to work with the values
        }
    }
    

    将输出:

    string(6) "titleA"
    bool(false)
    string(6) "titleB"
    bool(true)
    

    这也适用于阵列。

        2
  •  3
  •   Don't Panic    6 年前

    您可以使用 end 正如你所建议的。这将把内部数组指针移动到最后一个元素。然后您可以使用 key 在那个位置拿到钥匙。

    end($content);
    $lastKey = key($content);
    

    可以在迭代时将当前键与该键值进行比较 $content

    foreach ($content as $keys => $value) {
        if ($keys === $lastKey) echo 'Last One';
        // etc.
    }
    

    如果已解码到数组而不是对象,则还可以取消引用 array_keys 使用数组计数-1获取最后一个键。我喜欢 终止 / 钥匙 方法更多,因为它不会创建您可能永远不会使用的另一个数组,但有些人喜欢更少的代码行,因此:

    $lastKey = array_keys($content)[count($content) - 1];