如何只获得"标题"来自JSON文件

时间:2018-04-09 19:24:58

标签: php json foreach

我有这个结构(它是 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
        )
)

我能够循环并完成keysvalues,但我需要确定当前循环迭代是否是最后一次。

 $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 个答案:

答案 0 :(得分:3)

您可以按照建议使用end。这会将内部数组指针移动到最后一个元素。然后,您可以使用key获取该位置的密钥。

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

您可以在迭代$content时将当前密钥与该密钥值进行比较。

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

如果已解码为数组而不是对象,则还可以使用数组计数取消引用array_keys的结果 - 1以获取最后一个键。我更喜欢end / key方法,因为它不会创建您可能永远不会使用的另一个数组,但有些人喜欢更少的代码行,所以这里&#39那是:

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

答案 1 :(得分:2)

您可以使用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)

这也适用于数组。