我有一个存储在变量中的关联数组,如此
$result = Array (
[0] => stdClass Object ( [user_id] => 3 [zone_id] => -1 )
[1] => stdClass Object ( [user_id] => 3 [zone_id] => 0 )
[2] => stdClass Object ( [user_id] => 3 [zone_id] => 2 )
[3] => stdClass Object ( [user_id] => 3 [zone_id] => 3 )
[4] => stdClass Object ( [user_id] => 3 [zone_id] => 4 )
[5] => stdClass Object ( [user_id] => 4 [zone_id] => 0 )
[6] => stdClass Object ( [user_id] => 4 [zone_id] => 2 )
[7] => stdClass Object ( [user_id] => 4 [zone_id] => 4 )
[8] => stdClass Object ( [user_id] => 4 [zone_id] => 5 )
[9] => stdClass Object ( [user_id] => 4 [zone_id] => 7 ))
我想将此转换为更像这样的数组
$newResult = array(
[0] => stdClass Object ( [user_id] => 3 [zone_id] => "-1;0;1;2;3;4" )
[1] => stdClass Object ( [user_id] => 3 [zone_id] => "0;2;4;5;7" ))
我尝试使用this post作为参考,但在此过程中遇到了麻烦。当我简单地用我的变量替换变量时,我收到了这个错误
[Thu Oct 09 15:21:29 2014] [error] [client xxx.xxx.xx.xx] PHP Fatal error: Cannot use object of type stdClass as array in index.php on line 38
当我将$n['zone_id']
转换为$n->zone_id
时没有错误,但是zone_id似乎循环并永远重复。
踢球者是我还需要忽略0-9范围之外的任何数字(例如-1和10)。
对此有何见解?我觉得它应该更容易解决!
感谢。
答案 0 :(得分:0)
这是未经测试但如果我理解你正在做什么就应该工作
$new_array = [];
for($i = 0; $i < count($result); $i++) {
if(!in_array($result[$i]->user_id, $new_array[$i])) {
$new_array[$result[$i]->user_id] = [
'user_id' => $result[$i]->user_id,
'zone_id' => $result[$i]->zone_id
];
} else {
$new_array[$result[$i]['user_id']]['zone_id'] += ';' . $result[$i]['zone_id'];
}
}
答案 1 :(得分:0)
正如我在评论中写的那样 - 你有一些对象的数组,这是通过类似的东西创建的(我通过将数组反向投射到对象中来编写一个简单的例子,但它与你的完全相同,你可以检查一下)
$result = array (
(object) array( 'user_id' => 3, 'zone_id' => -1 ),
(object) array( 'user_id' => 3, 'zone_id' => 0 ),
(object) array( 'user_id' => 3, 'zone_id' => 2 ),
(object) array( 'user_id' => 3, 'zone_id' => 3 ),
(object) array( 'user_id' => 3, 'zone_id' => 4 ),
(object) array( 'user_id' => 4, 'zone_id' => 0 ),
(object) array( 'user_id' => 4, 'zone_id' => 2 ),
(object) array( 'user_id' => 4, 'zone_id' => 4 ),
(object) array( 'user_id' => 4, 'zone_id' => 5 ),
(object) array( 'user_id' => 4, 'zone_id' => 7 ),
);
您要么循环遍历数组并单独处理每个对象(与对象一样),要么在循环中将其转换为数组以使用它,就像使用关联数组一样(下面的示例)
$out = array();
foreach($result as $o)
{
$oArray = (array)$o; // cast to array
if (!isset($out[$oArray['user_id']]))
$out[$oArray['user_id']] = $oArray;
else
$out[$oArray['user_id']]['zone_id'] .= ';' . $oArray['zone_id'];
}
var_dump(array_values($out)); // output and reset keys
结果是
array(2) {
[0]=>
array(2) {
["user_id"]=>
int(3)
["zone_id"]=>
string(8) "-1;0;2;3;4"
}
[1]=>
array(2) {
["user_id"]=>
int(4)
["zone_id"]=>
string(11) "0;2;4;5;7"
}
}
但是如果你想循环遍历这些对象,而不是将每个对象都放到数组中,那么你的代码就会像
一样foreach($result as $o)
{
if (!isset($out[$o->user_id]))
$out[$o->user_id] = (array)$o;
else
$out[$o->user_id]['zone_id'] .= ';' . $o->zone_id;
}