개발 Q&A

제목 php 배열 생성 관련 질문입니다.
카테고리 PHP
글쓴이 케케케 작성시각 2022/03/07 20:16:46
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 1845   RSS

안녕하세요배열은 만드는데 잘 안되는 부분이 있어서 질문드립니다.

1번과 같은 배열이 있습니다

실제로 배열은 더 있고위와 같은 구조 처럼 기본적으로 id가 있고 상위id인 pid가있습니다.

1번의 2,3번째 배열 처럼  2,3번의 pid가 197이면해당 값을 id로 갖고있는 배열아래 sub로 추가를 하고싶습니다.

 

어떻게 하면 될까요?1번이 기존 배열이고완성하고싶은 배열이 2번입니다.

<?php
 
  $arrTmp = array();
  $arrTmp = array(
  array('id' => 206,
  'BoardName' => '일정게시판',
  'pid' => 196),
   
  array('id' => '197',
  'BoardName' => '테스트게시판',
  'pid' => 196),     
 
  array('id' => '198',
  'BoardName' => '하위게시판',
  'pid' => 197),
 
  array('id' => '199',
  'BoardName' => '하위게시판2',
  'pid' => 197)    
     
     
  );
 
 
  echo "-----1번 배열---------";
    echo "<pre>";
  print_r($arrTmp);
  echo "</pre>";
 
 
  $arrTmp2 = array(
  array('id' => 206,
  'title' => '일정게시판',
  'pid' => 196),
   
  array('id' => '197',
  'title' => '테스트게시판',
  'pid' => 196,
      'sub' => array(
         
      '하위게시판' => array
        (
         'title' => '하위게시판',
        'id' => 198    
        ),
      '하위게시판2' => array
        (
         'title' => '하위게시판2',
        'id' => 199    
        )
        
    )
  )
);
   
 
echo "-----2번 배열---------";
echo "<pre>";
print_r($arrTmp2);
echo "</pre>";
 
-----1번 배열---------
Array
(
    [0] => Array
        (
            [id] => 206
            [BoardName] => 일정게시판
            [pid] => 196
        )
 
    [1] => Array
        (
            [id] => 197
            [BoardName] => 테스트게시판
            [pid] => 196
        )
 
    [2] => Array
        (
            [id] => 198
            [BoardName] => 하위게시판
            [pid] => 197
        )
 
    [3] => Array
        (
            [id] => 199
            [BoardName] => 하위게시판2
            [pid] => 197
        )
 
)
-----2번 배열---------
Array
(
    [0] => Array
        (
            [id] => 206
            [title] => 일정게시판
            [pid] => 196
        )
 
    [1] => Array
        (
            [id] => 197
            [title] => 테스트게시판
            [pid] => 196
            [sub] => Array
                (
                    [하위게시판] => Array
                        (
                            [title] => 하위게시판
                            [id] => 198
                        )
 
                    [하위게시판2] => Array
                        (
                            [title] => 하위게시판2
                            [id] => 199
                        )
 
                )
 
        )
 
)
 
/*
foreach ($arrTmp as $key => $value) {
 
 
     
}
*/

 

 다음글 다른 브라우저는 이상 없는데 ie에서 안되는 경우 (2)
 이전글 Ci3 으로 restful api 테스트 중에 오류 문... (3)

댓글

빛그림 / 2022/03/07 21:39:58 / 추천 0
$arrTmp[3]['sub'][] = [
    '하위게시판' => ['title' => '하위게시판', 'id' => 198]
];
$arrTmp[3]['sub'][] = [
    '하위게시판' => ['title' => '하위게시판', 'id' => 199]
];


echo "-----2번 배열---------";
echo "<pre>";
print_r($arrTmp);
echo "</pre>";

이런걸 원하시는 것일까요?

케케케 / 2022/03/07 23:19:47 / 추천 0
빛그림 // 아니요 딱 제가 작성한 위에 2번 배열 형태처럼 나와야합니다.
빛그림 / 2022/03/07 23:22:08 / 추천 0
하위게시판 키가 두개가 될수가 없는데요 ㅡ.ㅡ
케케케 / 2022/03/07 23:34:45 / 추천 0

하위 게시판의 키가 2개가 될수없다는게 무슨말이죠?

위의 하위게시판 2개는 서로 다른거에요

케케케 / 2022/03/07 23:44:33 / 추천 0

키는 어차피 title이 들어가는지랑 [] 여기서 0,1,2.... 이런식으로 들어가는지의 차이인데

질문의 요지는 pid에 따라서 하위카테고리 생성 배열을 만들기 위함입니다.

 

빛그림 / 2022/03/07 23:55:37 / 추천 0
자세히 보니 하위게시판, 하위게시판2 였네요.
빛그림 / 2022/03/07 23:58:14 / 추천 0
$arrTmp[3]['sub']['하위게시판'] = ['title' => '하위게시판', 'id' => 198];
$arrTmp[3]['sub']['하위게시판2'] = ['title' => '하위게시판2', 'id' => 199];

 

이렇게 해보시면...

케케케 / 2022/03/08 00:23:11 / 추천 0

말씀하신게 맞는데 저걸 위에 $arrTmp로 루프를 돌면서 만들고싶은거에요

실제로 저 배열크기가 크고 pid나 id값은 여러가지가있고 키값은 정해진게 아니라 (3을 강제로 넣은거요)

트리구조로 만들고싶은데 잘 안되네요 

빛그림 / 2022/03/08 00:34:29 / 추천 0
for($i=0;$i<count($arrTmp);$i++) {
    if ($arrTmp[$i]['id'] == '찾는값') {
        $arrTmp[$i]['sub']['하위게시판'] = ['필요한 내용'];
    }
}

이렇게 하시면 될거 같은데요. 혹시나 하위계층 까지 반복해서 찾아야 한다면 함수 만들어 쓰시면 되고요.

케케케 / 2022/03/08 19:07:58 / 추천 0
array_key_exist 활용하여 해결하였습니다 감사합니다.