2013-01-08 24 views
-1

创建新的数组我有一个数组:从另一个

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]键= [的OData]键,并且在[rjad] [OData的]值=第二密钥。

我想要的是创建一个从旧有用户ID值在第二个数组新的数组:

这样的:

[rjad] => Array 
      (
       [2] => Array 
        (
         [0] => red 
         [1] => Array 
            (
            [blue] => Array 
               (
               [0] => 101 
               [1] => 200 
               ) 
         [2] => green 
        ) 

      ) 

挣扎已经3小时,没有成功。任何想法如何得到它都非常好。

图片做解释relatinships http://imageshack.us/photo/my-images/818/phparray.jpg/

+2

解释“用户”中的逻辑相关数据与“rjad”中的数据之间的关系。 –

+0

http://php.net/manual/en/function.array-merge.php –

+0

关系如下
[users] [101] [odata] [1] => 1等于[rjad] [2] [1 ] =>蓝色 – drupal2000

回答

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; 
     } 
    } 
} 
+0

这将无法正常工作,因为'用户'和'rjad'是不同的密钥请检查IMG http://imageshack.us/photo/my-images/818/phparray.jpg/ – drupal2000

+0

@ drupal2000,你真的尝试过了吗?基于你提供的数组,它返回你期待的结果。上面的映射位于odata键而不是用户标识键。 – Crisp

+0

不好意思,但是你的代码不会工作,因为我没有看到你如何从[rjad]获取数据。有数组$ somearray,它由$ somearray ['users']和$ someaaray ['rajd']组成。你的代码只处理$ somearray ['users']。我想从tese中获得新的数组。我不明白从上面的代码中获得$ rjad的位置? – drupal2000

0

你的问题还不完全清楚 - 是什么rjad之间的关系......蓝色和这些用户从其他阵列的帐户? odata数组中的项目0是默认颜色吗?

+0

对不起,应该是一个问题,而不是一个答案 - 第一次! – puppyFlo

+0

我添加了图片发布解释关系 – drupal2000