복붙노트

PHP 연관 배열 중복 키

PHP

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

해결법

  1. ==============================

    1.아니요, 연관 배열에서 동일한 키를 여러 개 가질 수는 없습니다.

    아니요, 연관 배열에서 동일한 키를 여러 개 가질 수는 없습니다.

    그러나 각각의 해당 값이 배열 인 고유 한 키를 가질 수 있으며 이러한 배열에는 각 키에 대해 여러 요소가 있습니다.

    그래서 이것 대신 ...

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

    ... 당신은 이것을 가지고 있습니다 :

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

    2.키는 변수의 확장입니다. 변수를 덮어 쓰면 변수를 덮어 씁니다.

    키는 변수의 확장입니다. 변수를 덮어 쓰면 변수를 덮어 씁니다.

  3. ==============================

    3.아니, 가질 수 없다. 내가 사용하는 해결 방법은 각 키 / 값 쌍을 두 개의 요소가있는 새로운 배열로 만드는 것입니다.

    아니, 가질 수 없다. 내가 사용하는 해결 방법은 각 키 / 값 쌍을 두 개의 요소가있는 새로운 배열로 만드는 것입니다.

    $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] 
    
  4. ==============================

    4.나는 같은 필요성을 가지고 동일한 키를 가진 배열을 만들었다. (단지 4 개의 루프가 아닌 2 개의 루프를 사용하여 성능을 유지하는 것이다.)

    나는 같은 필요성을 가지고 동일한 키를 가진 배열을 만들었다. (단지 4 개의 루프가 아닌 2 개의 루프를 사용하여 성능을 유지하는 것이다.)

    이것을 사용하여 : [$ increment. "-". $ 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
    )
    
  5. ==============================

    5.정확한 반대 결과를 연구하면서이 질문을 발견했습니다. 중복 키가있는 데이터 배열이 있습니다! 여기에 내가 어떻게했는지 (내 과정이 엉망이되는 곳을 파악하려고 시도하고있다.)

    정확한 반대 결과를 연구하면서이 질문을 발견했습니다. 중복 키가있는 데이터 배열이 있습니다! 여기에 내가 어떻게했는지 (내 과정이 엉망이되는 곳을 파악하려고 시도하고있다.)

    $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

  6. from https://stackoverflow.com/questions/2879132/php-associative-array-duplicate-keys by cc-by-sa and MIT license