Php 如何在具有整数键的对象上创建foreach?
我正在加载一个json文件,其中有一个对象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对象的键的
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数组替换它。