我有这个结构(它是 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
,但我需要确定当前循环迭代是否是最后一次。
$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来获取每次迭代中的最后一个键。但我不能这样做以获得最后的标题名称
所以我可以将最后一个与当前的一个进行比较,然后我知道我是否正在循环到最后一个。
是否可以将它们列在某种数组或类似的东西中?
答案 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)
$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)
这也适用于数组。