我有一个数组:
Array
(
[users] => Array
(
[101] => Array
(
[odata] => Array
(
[0] => 2
[1] => 1
[2] => 1
[3] => 1
)
)
[200] => Array
(
[odata] => Array
(
[0] => 2
[1] => 1
[2] => 1
[3] => 0
)
)
)
[rjad] => Array
(
[2] => Array
(
[0] => red
[1] => blue
[2] => green
)
)
)
在这个数组[rjad] key = [odata]键,[odata] value = [rjad]中的第二个键。
我想要的是使用第二个数组中的用户ID值从旧的数组创建新数组:
像这样:[rjad] => Array
(
[2] => Array
(
[0] => red
[1] => Array
(
[blue] => Array
(
[0] => 101
[1] => 200
)
[2] => green
)
)
挣扎已经3个小时没有成功。如何获得它的任何想法都非常好。
图片确实解释了关系 http://imageshack.us/photo/my-images/818/phparray.jpg/
答案 0 :(得分:1)
我会认真地重新考虑你的结构,但这是一个有效的(如果丑陋的)解决方案
foreach ($users as $userId => $user) {
foreach ($user['odata'] as $key => $value) {
if (isset($rjad[$key][$value])) {
if (!is_array($rjad[$key][$value])) {
$colour = $rjad[$key][$value];
$rjad[$key][$value] = array();
$rjad[$key][$value][$colour] = array();
} else {
reset($rjad[$key][$value]);
$colour = key($rjad[$key][$value]);
}
$rjad[$key][$value][$colour][] = $userId;
}
}
}
工作演示 - > http://codepad.viper-7.com/IEcpvU
基于评论似乎你可能想要一个单独的数组,这很容易解决
// copy the array and act on it instead of directly on $rjad
$result = $rjad;
foreach ($users as $userId => $user) {
foreach ($user['odata'] as $key => $value) {
if (isset($result[$key][$value])) {
if (!is_array($result[$key][$value])) {
$colour = $result[$key][$value];
$result[$key][$value] = array();
$result[$key][$value][$colour] = array();
} else {
reset($result[$key][$value]);
$colour = key($result[$key][$value]);
}
$result[$key][$value][$colour][] = $userId;
}
}
}
答案 1 :(得分:0)
您的问题并不完全清楚 - rjad ... blue与其他数组中的用户帐户之间的关系是什么? odata数组中的第0项是默认颜色吗?