2010-05-21 32 views
15

Tôi có một mảng kết hợp, tuy nhiên khi tôi thêm giá trị vào nó bằng cách sử dụng hàm bên dưới, dường như nó ghi đè lên cùng một khóa. Có cách nào để có nhiều khóa giống nhau với các giá trị khác nhau không? Hay có một dạng mảng khác có cùng định dạng?Phím sao chép tương đối của PHP

Tôi muốn có:

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

Code:

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

ý nghĩa của các phím số này là gì? –

Trả lời

27

Không, bạn không thể có bội số của khóa tương tự trong một mảng kết hợp.

Bạn có thể, tuy nhiên, có các khóa duy nhất mà mỗi giá trị tương ứng của chúng là các mảng và các mảng đó có nhiều phần tử cho mỗi khóa.

Vì vậy, thay vì điều này ...

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

... bạn có điều này:

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

Một khóa là một phần mở rộng của một biến. Nếu bạn ghi đè lên biến ... bạn ghi đè lên biến.

1

Không, bạn không thể có. Một workaround tôi sử dụng là phải có mỗi cặp khóa/giá trị như là một mảng mới với 2 yếu tố:

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

Ví dụ, bạn có thể truy cập vào chìa khóa thứ hai (= 42) sử dụng:

$test[1][0] 

và giá trị thứ hai (= 86) bằng cách sử dụng:

$test[1][1] 
0

tôi cũng có nhu cầu tương tự tạo một mảng với cùng khóa, (chỉ để giữ hiệu suất bằng cách sử dụng hai vòng thay vì 4 vòng).

bằng cách sử dụng: [$ increment. "-". $ Domain_id] => $ article_id; danh sách các bài viết trong từng lĩnh vực trông như thế này sau một 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 
) 

Và sau đó bởi Looping qua bảng này để kết hợp bài viết của miền:

$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); 
    } 

bạn có được điều này

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

Tôi đã tìm thấy câu hỏi này trong khi nghiên cứu kết quả dự kiến ​​chính xác ngược lại, tôi có một mảng dữ liệu có khóa trùng lặp! Đây là cách tôi đã làm nó (vẫn cố gắng tìm ra nơi trong quá trình của tôi những điều đang rối tung lên).

$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} 
*/ 

Yup .... vừa mới xảy ra.

PHP 7.1

Các vấn đề liên quan