2014-11-12 2 views
-1

배열 처리 문제가 있습니다. 두 배열에서 "usernames"가 일치하는지 확인하기 위해 두 배열을 "비교"하고 싶습니다. 나는() 함수를와 in_array 사용하고 있는지 확실하지 않다 제대로in_array() 함수를 사용하여 배열을 만드는 방법은 무엇입니까?

내 배열처럼 보이는 방법이 있습니다 :

사용자 배열 1 :

Array ([0] => Array ([username] => LNDP [station] => D08) 
     [1] => Array ([username] => ACMAN [station] => D06) 
     [2] => Array ([username] => VTER [station] => D13) 
    ) 

    //the users will have to be matched with memo_code 
    $user = array(); 
    while($row = mysqli_fetch_assoc($get_user_result)){ 
     $user[] = array("username" => $row['username'], 
         "station" => $row['station_number']               
          ); 
    } 

메모 배열 2 :

Array ( [0] => Array ([username] => VTER[aht_value] => 333) 
      [1] => Array ([username] => ACMAN [aht_value] => 456) 
      [2] => Array ([username] => ACYL [aht_value] => 789) 
     ) 


$memo = array(); 
    while ($row = mysqli_fetch_assoc($dbh2_result)){ 
     $memo[] = array("username" => $row['memo_code'], 
         "aht_value" => $row['avg_handle_time'] 
        ); 
    } 

내 사용자 배열의 "사용자 이름"과 일치하도록 내 메모 배열의 모든 "사용자 이름"을 확인하고 싶습니다.

Array ([0] => Array ([username] => ACMAN [aht_value] => 456 [station] => D06) 
    ) 

내가 뭘하려 :이 일치 할 경우 , 나는 이름, 역, aht_value과 같이 배열을 만들

// 키 값을 사용하여 1과 2를 비교하여 배열 (3)를 작성 배열 2에서 "username"의 문자열 $ result = array(); // $ m = 키 // $ m [ '이름'] = 키 값 의 foreach (AS $ 메모 $ m => $ m [ '이름']) {

 //if username in array 2 is in array 1 
     if(in_array($m, $user)){ 
      //if aht_value is not null 
      if($memo['aht_value'] != null){ 
      $result[] = "username: " . $user['username'] . "aht_value: " .$m['aht_value'] . "position: " . $user['position']. "<br>"; 
      } 
      //else if aht_value is null 
      else{ 
       $result[] = "username: " . $user['username'] . "aht_value: NA position: " . $user['position'] . "<br>"; 
      } 
     } 
     //if there is no matching username do something? 
     else{ 
      echo "no match"; 
     } 

    } 

    $final_result = json_encode($result); 
    echo $final_result; 

I가 필요하면 물건을 명확하게 물어보십시오. 세 번째 배열을 성공적으로 생성 한 후 json_encode를 사용하여 AJAX 호출을 만들고 GET 형식을 사용합니다.

미리 도움을 청하십시오!

+0

오류는 매우 간단합니다. foreach의 =>에'$ username'과 같은 것을 사용할 필요가 있습니다. 그리고 foreach 내에서'$ username [ 'username']'같은 것들을 가져옵니다. – Andrew

+0

이렇게? ** foreach ($ memo는 $ username => $ user [ 'username']) {** 이것은 루프의 모든 것에 "no match"를줍니다. – alda1234

+0

Nooo. 'foreach ($ mem => $ value) {echo $ value [ 'username']; }'. 그런 것. – Andrew

답변

1
$memo = array(); 
$result = array(); 
$user = array(); 

while($row = mysqli_fetch_assoc($get_user_result)) { 
    $user[] = array(
     "username" => $row['username'], 
     "station" => $row['station_number'] 
    ); 
} 
while ($row = mysqli_fetch_assoc($dbh2_result)) { 
    $memo[] = array(
     "username" => $row['memo_code'], 
     "aht_value" => $row['avg_handle_time'] 
    ); 
} 

foreach ($memo as $i => $memodata) { 
    foreach ($user as $j => $userdata) { 
     if ($memodata['username'] == $userdata['username']) { 
      if (is_null($memodata['aht_value'])) { 
       $result[] = "username: " . $userdata['username'] . " aht_value: NA position: " . $userdata['station']; 
      } else { 
       $result[] = "username: " . $userdata['username'] . " aht_value: " .$memodata['aht_value'] . " position: " . $userdata['station']; 
      } 
     } 
    } 
} 


echo json_encode($result); 

이 방법은 매우 효율적이지 않습니다. SQL JOIN이 더 잘 작동하거나 배열에 UNIQUE 인덱스를 추가 할 수 있습니다. (연관 배열에 중복 키가 없기 때문에 사용자 이름을 반복하면 작동하지 않습니다)

<?php 

$memo = array(); 
$result = array(); 
$user = array(); 

while($row = mysqli_fetch_assoc($get_user_result)) { 
    $user[$row['username']] = array(
     "username" => $row['username'], 
     "station" => $row['station_number'] 
    ); 
} 
while ($row = mysqli_fetch_assoc($dbh2_result)) { 
    $memo[$row['memo_code']] = array(
     "username" => $row['memo_code'], 
     "aht_value" => $row['avg_handle_time'] 
    ); 
} 

foreach ($memo as $username => $memodata) { 
    if (in_array($username, array_keys($user))) { 
     // Match username against the keys of $user (the usernames) */ 
     $userdata = $user[$username]; 
     if (is_null($memodata['aht_value'])) { 
      $result[] = "username: " . $userdata['username'] . "aht_value: NA position: " . $userdata['position'] . "<br>"; 
     } else { 
      $result[] = "username: " . $userdata['username'] . "aht_value: " .$m['aht_value'] . "position: " . $userdata['position']. "<br>"; 
     } 
    } 
} 


echo json_encode($result); 
+0

당신의 방법과 수정 된 것들을 모두 시도했지만 결과와 오류 메시지가 계속 많습니다. ** 정의되지 않은 인덱스 : 175 행의 위치 ** ** $ result [] = "username :". $ userdata [ 'username']. "aht_value : NA 위치 :". $ userdata [ '위치']. "
"; ** ELSE 문을 건너 뜁니다. 그것은 단지 "IF"로 간다. – alda1234

+0

즉, 'position'키가 배열에서 발견되지 않습니다. 그것은 출력물에 있지만, 예제 배열 중 어느 것도 배열을 가지고 있지 않습니다. –

+0

실제 배열을'var_dump '할 수 있습니까? 전체 구조처럼? 그들이 거대한 경우에 pastebin를 시도하십시오. –

0

더 나은 방법이있을 수 있습니다, 이것은 당신이 원하는 것을 달성해야

$data = array() 
foreach($memo as $m){ 
    foreach($user as $u){ 
     if($m['username']===$u['username']){ 
      $m['station'] = $u['station']; 
      $data[] = $m; 
     } 
    } 
} 

를하지만 내가 당신이라면, 나는 SQL이되도록 사용자 이름이나 ID에 가입하여 레코드를 병합 관리하는 것입니다 만 하나의 쿼리가 실행됩니다. 이 같은

+0

나는 이전과 비슷한 루프를 가지고 있었지만 하나의 for 루프를 만들고 싶다.Theres는 메모 배열에 "station"을 가지고 있지 않으므로 이것을 $ u [ 'station']과 어떻게 비교할 수 있습니까? 덕분에 – alda1234

+0

신중하게 코드를 읽고, 사용자 이름을 비교하고 있습니다. 역이 메모에 추가됩니다. – meda

0

시도 뭔가 : 당신이 두 개의 배열을 통해 루프를 가지고 있기 때문에

<?php 

    function inUserArray($userArray, $username) 
    { 
     foreach($userArray as $user) 
     { 
      if($user['username'] == $username) 
      { 
       return $user; 
      } 
     } 

     return array(); 
    } 


    foreach($memo as $m){ 

     //if username in array 2 is in array 1 
     $user = inUserArray($user, $m); 
     if(!empty($user)){ 
      //if aht_value is not null 
      if($m['aht_value'] != null){ 
      $result[] = "username: " . $user['username'] . "aht_value: " .$m['aht_value'] . "position: " . $user['position']. "<br>"; 
      } 
      //else if aht_value is null 
      else{ 
       $result[] = "username: " . $user['username'] . "aht_value: NA position: " . $user['position'] . "<br>"; 
      } 
     } 
     //if there is no matching username do something? 
     else{ 
      echo "no match"; 
     } 

    }   
?> 
+0

코드를 사용해 보았지만 출력 결과는 ** [] ** 어떤 아이디어입니까? 고마워요 – alda1234

관련 문제