2010-05-21 85 views
15

我有一个关联数组,但是当我使用下面的函数向它添加值时,它似乎覆盖了相同的键。有没有办法让多个相同的键具有不同的值?还是有另一种格式相同的数组形式?PHP关联阵列重复键

我想有:

42=>56 
42=>86 
42=>97 
51=>64 
51=>52 
etc etc 

代码:

function array_push_associative(&$arr) { 
     $args = func_get_args(); 
     foreach ($args as $arg) { 
      if (is_array($arg)) { 
       foreach ($arg as $key => $value) { 
        $arr[$key] = $value; 
        $ret++; 
       } 
      }else{ 
       $arr[$arg] = ""; 
      } 
     } 
     return $ret; 
    } 
+0

这些数字键的含义是什么? – 2010-05-21 02:09:44

回答

27

不,你不能有相同的键的多个关联数组。

但是,您可以拥有每个对应值为数组的唯一键,并且这些数组对于每个键都有多个元素。

所以不是这个......

42=>56 42=>86 42=>97 51=>64 51=>52 

...你有这样的:

Array (
    42 => Array (56, 86, 97) 
    51 => Array (64, 52) 
) 
7

的关键是一个可变的延伸。如果您覆盖变量...则覆盖该变量。

1

不,你不能拥有。我用一种解决方法是让每个键/值对作为新的数组2个元素:

$test = array(
    array(42,56), 
    array(42,86), 
    array(42,97), 
    array(51,64), 
    array(51,52) 
) 

例如,可以访问使用所述第二密钥(42例):

$test[1][0] 

和使用所述第二值(= 86):

$test[1][1] 
0

我有同样的需要太创建阵列使用相同的按键,(只是为了通过使用两个循环而不是4个循环保持性能)。

通过使用:[$增量。“ - ”。$ domain_id] => $ article_id; 我在各个领域的文章列表看起来像这样的print_r(后):

$AllSa = Array 
(
    [1-5] => 143 
    [2-5] => 176 
    [3-5] => 992 
    [4-2] => 60 
    [5-2] => 41 
    [6-2] => 1002 
    [4-45] => 5 
    [5-45] => 18 
    [6-45] => 20 
) 

然后通过该表循环到文章域关联:

$AssocSAPerDomain = array(); 
    $TempDomain  = ""; 
    $TempDomain_first = 0; 
    foreach($tree_array as $id_domain => $id_sa){ 
     if(!$TempDomain && $TempDomain_first == 0){ $TempDomain = substr(strrchr($id_domain, "-"), 1); $TempDomain_first = 1; } 
     $currentDomain = substr(strrchr($id_domain, "-"), 1); 
     //if($TempDomain == $currentDomain) 
     $AssocSAPerDomain[$currentDomain][] = $id_sa; 
     $TempDomain = substr(strrchr($id_domain, "-"), 1); 
    } 

你得到这个

$assoc= Array 
(
    [5] => 143 
     => 176 
     => 992 
    [2] => 60 
     => 41 
     => 1002 
    [45]=> 5 
     => 18 
     => 20 
) 
0

我在研究完全相反的预期结果时发现了这个问题,我有一组具有重复键的数据!以下是我如何做到的(仍然试图弄清楚我的过程在哪里搞乱了)。

$session = time(); 
$a = array(); 
$a[(string)$session] = 0; 
$j = json_encode($a,JSON_FORCE_OBJECT); 
print_r($a); 
/* output: 
Array 
(
    [1510768034] => 0 
) 
*/ 
var_dump($a); 
/* output: 
array(1) 
(
    [1510768034] => int(0) 
) 
*/ 
print_r($j); 
/* output: 
{"1510768034":0} 
*/ 
$a = (array)json_decode($j); 
$session = @array_pop(array_keys($a)); 
$a[(string)$session] = 10; 
$j = json_encode($a,JSON_FORCE_OBJECT); 
print_r($a); 
/* output: 
Array 
(
    [1510768034] => 0 
    [1510768034] => 10 
) 
*/ 
var_dump($a); 
/* output: 
array(2) 
(
    '1510768034' => int(0) 
    [1510768034] => int(10) 
) 
*/ 
print_r($j); 
/* output: 
{"1510768034":0,"1510768034":10} 
*/ 

是......只是发生了。

PHP 7.1