我正在加载一个json文件,其中有一个对象data
,其属性只有整数。
它们以1000
开头,然后递增到9999
。一切都好。问题来自属性10000
及更高版本。当我使用json_decode(file_get_contents('myjsonfile'))
加载文件时,如果我尝试执行foreach
循环,我首先拥有以1000
开头的所有属性,因此这包括所有属性10000
然后我有其他的(2000
,3000
等等。)
实际问题是我需要保留密钥(因为属性是有时包含" base" data
对象的键的链接的对象
如何使用按键排序的asc进行工作foreach
循环?
答案 0 :(得分:0)
我使用临时表格对SORT_NATURAL
进行排序,然后对其进行排序:
$tmp=array();
foreach ($obj as $key=>$item) {
$tmp[$key]=$item;
}
$tmp=(array_keys($tmp));
sort($tmp, SORT_NATURAL);
foreach ($tmp as $key) {
$item=$obj->$key;
/* ... my other code, with a good iteration ... */
}
答案 1 :(得分:0)
由于JSON数组键是字符串,这就是自动对数组进行排序的原因。
首先使用ksort
功能:
$array = (array) json_decode(json_encode(array("3000" => "Third", "10000" => "Fourth", "2000" => 'Second', "1000" => 'First')));
ksort($array, SORT_NUMERIC);
foreach ($array as $k => $v) {
var_dump($k, $v); echo "<br/>";
}