2014-02-28 33 views
0

如何组合第一个数组包含重复键的两个数组?例如结合以下几点:PHP:结合两个数组保持重复键?

$keys_arr 
Array 
    (
     [0] => iPhone 
     [1] => iPhone 
     [2] => iPhone 
     [3] => Samsung 
    ) 

$values_arr 
Array 
(
    [0] => 5 
    [1] => 5 
    [2] => 5 
    [3] => Galaxy IV 
) 

我在寻找的结果是:

$combined_array 
Array 
    (
     [iPhone] => 5 
     [iPhone] => 5 
     [iPhone] => 5 
     [Samsung] => Galaxy IV 
    ) 

使用下面的foreach(PHP - merge two arrays similar to array_combine, but with duplicate keys):

foreach ($keys_arr as $key => $value) { 
    $combined_array[] = array($value => $values_arr[$key]); 
} 

我得到:

Array 
(
    [0] => Array 
     (
      [iPhone] => 5 
     ) 

    [1] => Array 
     (
      [iPhone] => 5 
     ) 

    [2] => Array 
     (
      [iPhone] => 5 
     ) 

    [3] => Array 
     (
      [Samsung] => Galaxy IV 
     ) 

) 

我在哪里goi恩错了吗?

+7

你正在寻找的结果是不可能的,因为PHP不允许重复键阵列中的 –

+0

为什么不尝试创建'$ combined_array =阵列(阵列(“iPhone”,“5”), 阵列('iPhone','5'), array('iPhone','5'), array('Samsung','Galaxy IV') );' –

+0

因此,看起来您将两条信息关于单个物体在一起。你可能会考虑将一些对象组合成一个对象,比如'[{'product_line':'iPhone','model':'5'},...,{'product_line':'Samsung','model':'Galaxy IV '}]',以便为每个数组值创建一个新的属性名称,通过该名称可以明确查找要存储的信息。 –

回答

0

php的关联数组需要具有唯一的键值 - 尽管可以有相同的值(即:5, 5, 5),但键必须是不同的。

您可以“解决”的一种方法是在重复的情况下使用链接列表数据结构;这会导致;

$iPhone = {(5), (5), (5)} 

$Samsung = Galaxy IV 

一个简单的解决方法就是使用多维数组;即:

Array[iPhone]将容纳一个单独的数组,包含{5, 5, 5}

你可以在这里阅读更多关于实际链表的内容; http://www.php.net/manual/en/class.spldoublylinkedlist.php