2013-07-04 4 views
1

나는 스스로 해결할 수없는 문제가 있습니다. 내가 달성하고자하는 것은 일종의 검색 필터입니다. 하나의 행에서 +100 행 사이의 변수를 가질 수있는 배열이 있습니다. 배열은 다음과 같이 구축 : 나는 C#에서 함수의 결과의 배열을 생성하는 WCF의 웹 서비스를함수 in_array() - 다차원 객체 배열의 값을 찾습니다.

stdClass Object ([ReadOpenCallsResult] => stdClass Object ( 
    [ArrayOfstring] => Array 
    ( 
     [0] => stdClass Object ( 
     [string] => Array 
     (
      [0] => 180355 
      [1] => C0000448207 
      [2] => TESTDOC 
      [3] => 3-7-2013 14:20:14 
      [4] => 3-7-2013 14:20:14 
      ) 
     [1] => stdClass Object ( 
     [string] => Array 
     (
      [0] => 180355 
      [1] => C0000448209 
      [2] => TESTDOC 
      [3] => 2-7-2013 14:20:14 
      [4] => 2-7-2013 14:20:14 
    ) 
) 

: 여기

Array 
(
    [0] => Array 
     (
      [0] => PK customer 
      [1] => Call number 
      [2] => Subject of the call 
      [3] => Date created 
      [4] => Date changed 
     ) 

    ) 

이 진짜 내 배열의 하나의 버전입니다 그런 다음 PHP 페이지로 보냅니다. 이제 in_array 함수를 테스트하고 있는데, 쉬운 배열로 완벽하게 작동하지만 다차원 배열과 함께 작동하지 않는 것처럼 보입니다. 내 배열을 $_SESSION['searchCalls']에 저장합니다.

나는 모든 종류의 배열을 테스트했지만 작동하도록 '실제'배열을 얻을 수 없습니다. 나는 이런 식으로 시도 :

$key = array_search('180335',$_SESSION['searchCalls']); 

그리고이 방법을

if (in_array('180335',$_SESSION['searchCalls'])) 

편집 : 나는 정말 좋은 예를 보았다,하지만 .. 그 때 누군가 하위 배열의 모든 값을 얻을 수 있습니다 'C0000448207'을 찾은 다음 전화의 제목과 날짜를 가져옵니다.

개체 배열을 생성하는 함수입니다.

public List<List<string>> ReadOpenCalls(int relation) 
     { 

      RidderIQSDK IQSDK = new RidderIQSDK(); 

       SDKRecordset inboundSet = IQSDK.CreateRecordset("R_ACTIONSCOPE", "PK_R_ACTIONSCOPE, DESCRIPTION, DATECREATED, DATECHANGED, CODE", "FK_RELATION = " + relation, "DATECREATED DESC "); 
       var messages = new List<List<string>>(); 
       List<string> mess = new List<string>(); 

       if (inboundSet != null && inboundSet.RecordCount > 0) 
       { 
        inboundSet.MoveFirst(); 

        do 
        { 
         List<string> list = new List<string>(); 
         string pkas = inboundSet.Fields["PK_R_ACTIONSCOPE"].Value.ToString(); 
         string code = inboundSet.Fields["CODE"].Value.ToString(); 
         string descr = inboundSet.Fields["DESCRIPTION"].Value.ToString(); 
         string datecreated = inboundSet.Fields["DATECREATED"].Value.ToString(); 
         string datechanged = inboundSet.Fields["DATECREATED"].Value.ToString(); 

         list.Add(pkas); 
         list.Add(code); 
         list.Add(descr); 
         list.Add(datecreated); 
         list.Add(datechanged); 

         messages.Add(list); 

         inboundSet.MoveNext(); 

        } 
        while (!inboundSet.EOF); 
        return messages; 
       } 
        mess.Add(null); 
        messages.Add(mess); 

        IQSDK.Logout(); 
        return messages; 


       } 

나는 이미이 문제를 해결했다. 이것은 내 솔루션으로 다소 불쾌하지만 작동합니다.

$roc = array('relation' => $_SESSION['username']); 
$rocresponse = $wcfclient->ReadOpenCalls($roc); 
$_SESSION['searchCalls'] = $rocresponse; 

    foreach ($rocresponse->ReadOpenCallsResult as $key => $value){ 
    if (count($value) === 0) { 
    } 
    if (count($value) === 1) { 
     foreach ($value as $key1 => $value1){ 
      if (in_array($searchWord,$value1)){ 
        echo "Value is in it"; 
       } 
     } 
    } 
    else{ 
     foreach($value as $key1 => $value1){ 
      foreach($value1 as $key2 => $value2){ 
       if (array_search($searchWord,$value2)){ 
        print_r($value2); 
       } 

      } 
     } 
    } 
} 

저는 항상 더 나은 솔루션에 관심이 있습니다. 아마도이 솔루션은 다른 사람을 도울 수 있습니다.

+0

뭔가를하려고하면? 배열의 배열이 없기 때문에 배열이있는 객체의 배열이 있기 때문입니다. – Voitcus

+1

재귀 함수 또는 반복자가 필요합니다. 나는 이것이 이미 stackoverflow에서 요청되었는지 확신한다. – Leri

+1

배열이 아니라 객체 배열입니다. – Napster

답변

1

Nisarg에 의해 지적한대로 이것은 Array 객체가 아닙니다. 또는 개체를 액세스하고 있음을 나타 내기 위해 질문을 업데이트해야합니다.

어떤 개체 속성이 어느 정도 추론으로 배열을 사용하고이

$SearchCalls = $_SESSION['searchCalls']; 
if (in_array('180335',$SearchCalls->ReadOpenCallsResult)){ 

//do some work. 
} 
+0

에서 제거해야합니다. ( – Matheno

+0

@Marijke Ohhh - 두 하위 배열이 실제로 개체이기도합니다. 각 개체를 검색해야합니다. 개별적으로 또는 배열로 이동합니다. 왜 처음부터 객체입니까? –

+0

내 C# 함수로 객체를 만듭니다. 응용 프로그램에서 내 함수를 게시하는 것이 유용 할 것이라고 생각합니까? – Matheno

관련 문제