Php 如何在具有整数键的对象上创建foreach?

Php 如何在具有整数键的对象上创建foreach?,php,arrays,json,Php,Arrays,Json,我正在加载一个json文件,其中有一个对象data,它的属性只有整数 它们从1000开始,然后递增,直到9999。一切都好。问题在于属性10000及更高。当我使用json\u decode(file\u get\u contents('myjsonfile'))加载文件时,如果我尝试执行foreach循环,我首先拥有以1000开头的所有属性,因此这包括所有10000属性,然后我拥有其他属性(2000,3000,等等) 实际的问题是我需要保留键(因为属性是有时包含指向“base”data对象的键的

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

它们从
1000
开始,然后递增,直到
9999
。一切都好。问题在于属性
10000
及更高。当我使用
json\u decode(file\u get\u contents('myjsonfile'))
加载文件时,如果我尝试执行
foreach
循环,我首先拥有以
1000
开头的所有属性,因此这包括所有
10000
属性,然后我拥有其他属性(
2000
3000
,等等)

实际的问题是我需要保留键(因为属性是有时包含指向“base”
data
对象的键的链接的对象)


如何使用asc排序的键创建一个有效的
foreach
循环?

我使用一个临时表对键进行排序,然后使用
sort\u NATURAL
对foreach进行排序:

$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 ... */
}

由于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/>";
}
$array=(array)json_解码(json_编码(array(“3000”=>“第三”、“10000”=>“第四”、“2000”=>“第二”、“1000”=>“第一”)));
ksort($array,SORT\u NUMERIC);
foreach($k=>v的数组){
var_dump($k,$v);echo“
”; }
因此您将数组键排序为字符串。按整数排序,所以9999之后是10000。我不想排序,它只想在上面做一个foreach。你是使用
foreach($key=>array$value)
还是
foreach($array as$value){$index++}
?这就是我要说的:如果我做一个
foreach($key=>array$value)
我从10001001开始,然后是10001,10002,然后是2000年,2001年。我想要:1000、1001、2000、2001,然后10001、10002您可以用JSON_decode()编写完整的JSON字符串,这样您就不会通过JSON_encode(),这可能会改变结果。@OlivierPons您没有提供任何JSON字符串,所以我以一种丑陋无用的方式创建了您。您可以用JSON数组替换它。