如何使用整数键对一个对象进行foreach?

时间:2014-12-30 11:57:53

标签: php arrays json

我正在加载一个json文件,其中有一个对象data,其属性只有整数

它们以1000开头,然后递增到9999。一切都好。问题来自属性10000及更高版本。当我使用json_decode(file_get_contents('myjsonfile'))加载文件时,如果我尝试执行foreach循环,我首先拥有以1000开头的所有属性,因此这包括所有属性10000然后我有其他的(20003000等等。)

实际问题是我需要保留密钥(因为属性是有时包含" base" data对象的键的链接的对象

如何使用按键排序的asc进行工作foreach循环?

2 个答案:

答案 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/>";
}