2017-12-29 19 views
1

내가 특정 값이 배열의 키로서 존재하고 난 다음 작업을 수행 할 필요가 않습니다 확인하고로부터 깊은 그 값을 얻을 - 그것은 어떤 데이터를 수집하기 위해 존재합니다. 다음은 상황입니다.PHP - 다차원 배열의 키에 대한 검색 및 구조

$valueCode; //(it can be EV000005, EV000010, etc.) 
$temp = array_key_exists_custom($valueCode,$v); //does valueCode exist in array $v 

//If it exist I need to collect it is value deeper from structure 
//For example, for EV000005 -> I want to get 'Thread holding' 

if ($temp) { 
$colValue; // after perfroming code, $colValue should have value 'Thread holding' 
} 

구조가 EV000005 인 경우이를 수행하고 값을 얻습니다.

$colValue = $v[0][$valueCode][0][0][1]; 

하지만 내 값이 $v[0]에 없을 때 상황이 있기 때문에 그것은 나에게 해결책이 아니다, f.e. EV000010을 검색하면 $v[1][$valueCode][0][0][1];이됩니다. 나는이 가치를 얻는 가장 좋은 방법이 무엇인지 전혀 모른다.

배열 예 : 배열의 검색

Array 
(
    [0] => Array 
     (
      [EV000005] => Array 
       (
        [0] => Array 
         (
          [0] => Array 
           (
            [0] => EN 
            [1] => Thread holding 
           ) 

          [1] => Array 
           (
            [0] => nl-NL 
            [1] => Schroefdraadhouder 
           ) 

         ) 

       ) 

     ) 

    [1] => Array 
     (
      [EV000010] => Array 
       (
        [0] => Array 
         (
          [0] => Array 
           (
            [0] => EN 
            [1] => Desoldering iron 
           ) 

          [1] => Array 
           (
            [0] => nl-NL 
            [1] => Desoldeerbout 
           ) 

         ) 

기능

배열의 각 요소에 대한
function array_key_exists_custom($needle, $haystack){ 
      $result = array_key_exists($needle, $haystack); 
      if ($result) { 
       return $result; 
      } 

      foreach ($haystack as $v) { 
       if (is_array($v)) { 
        $result = array_key_exists_custom($needle, $v); 
       } 
       if ($result) { 
        return $result; 
       } 

      } 
      return $result; 
     } 
+0

하여 결과를 얻을 부분은 - '[0] [0] 1]'- 항상 같은가요? – splash58

+0

예 ... 똑같습니다. 나는 항상이 가치를 취할 필요가있다. – punky

+0

array_key_exists_custom을 변경하여 발견 된 키의 값을 반환하지만 부울은 반환하지 않습니다. 그건 매우 쉬워요. '$ res = array_key_exists_custom ($ key, $ arr) [0] [0] [1]; ' – splash58

답변

1

변화 array_key_exists_custom 이러한 방식으로, 키 포인트를 발견 값을 반환 :

$result = array_key_exists($needle, $haystack); 
if ($result) { return $haystack[$needle]; } 

$res = array_key_exists_custom($key, $arr)[0][0][1]; 
0

사용 기능 is_array()는 "깊은"

0

내가 가진 조금 고투하고 이동하는 방법 문제의 설명 - 내가 추측 무엇 명명 된 키 (예를 들어 EV000005) 아래 데이터를 찾으려하지만,이 키는 최상위 배열에 어디 있는지 모르겠입니다.

이 제품은 XY problem처럼 보인다. 관심있는 키가 최상위 배열의 키가 아니기 때문에 어려움이 발생합니다. 초기 데이터 구조가 ....

Array (
     [EV000005] => Array 
      (
       [0] => Array 
        (
         [0] => Array 
          (
           [0] => EN 
           [1] => Thread holding 
          ) 
         [1] => Array 
          (
           [0] => nl-NL 
           [1] => Schroefdraadhouder 
          ) 
        ) 
      ) 
     [EV000010] => Array 
      (
       [0] => Array 
        (
         [0] => Array 
          (
           [0] => EN 
           [1] => Desoldering iron 
          ) 
         [1] => Array 
          (
           [0] => nl-NL 
           [1] => Desoldeerbout 
          ) 
        ) 

...이 대화는 없었습니다. 당신은 당신이 제공 한 (틀림없이 부족) 정보를 바탕으로

$colValue = $v['EV000005'][0][0][1]; 

는 단일 요소 배열의 첫 번째 수준에 대한 이유가 없다 사용하는 것, 그것은 훨씬 더 어려운 당신의 인생을 만들고있다. 깊은 데이터를 보면

이 반 패턴은 반복과 데이터가 더 정확하게해야한다 :

  Array (
     [EV000005] => Array 
      (
       [EN] => Thread holding 
       [nl-NL] => Schroefdraadhouder 
      ) 
     [EV000010] => Array 
      (
       [EN] => Desoldering iron 
       [nl-NL] => Desoldeerbout 
      ) 

코드와 또 다른 문제는 당신이 PHP에서 데이터 필터링 작업을 수행하는 것입니다. 데이터는 PHP에서 생성되지 않았습니다 - 데이터베이스에 저장해야합니다. PHP가 아니라 데이터베이스에서 필터링 및 정렬 작업을 수행해야합니다.

.... 제대로 문제를 해결 할 수 없으며 솔루션 인 당신의 접근 방식을 적용 할 아주 매우 좋은 이유가 있다고, 지금은 가정

function retrieve_description($item, $lang, &$arr) 
{ 
    foreach ($arr as $record) { 
     if (is_array($record[$item])) { 
      foreach ($record[$item] as $description) { 
       if ($description[0]==$lang) return $description[1]; 
      } 
      return false; 
     } 
    } 
    return false; 
} 

이미 식별자가있는 것들에 임의의 숫자 할당을 멈추십시오.