> 백엔드 개발 > PHP 튜토리얼 > 어레이 재편성

어레이 재편성

WBOY
풀어 주다: 2023-03-02 14:46:01
원래의
1072명이 탐색했습니다.

1, 배열 arr1을 arr2로 변환하는 방법은 무엇입니까?

arr1 = [

<code>['tracking1','abc@qq.com','80'],
['tracking1','abc@qq.com','50'],
['tracking2','efg@qq.com','60'],
['tracking2','efg@qq.com','30'],</code>
로그인 후 복사
로그인 후 복사

];

arr2 = [

<code>['tracking1','abc@qq.com',['80','50']],
['tracking2','efg@qq.com',['60','30']],</code>
로그인 후 복사
로그인 후 복사

];

답글 내용:

1, 배열 arr1을 arr2로 변환하는 방법은 무엇입니까?

arr1 = [

<code>['tracking1','abc@qq.com','80'],
['tracking1','abc@qq.com','50'],
['tracking2','efg@qq.com','60'],
['tracking2','efg@qq.com','30'],</code>
로그인 후 복사
로그인 후 복사

];

arr2 = [

<code>['tracking1','abc@qq.com',['80','50']],
['tracking2','efg@qq.com',['60','30']],</code>
로그인 후 복사
로그인 후 복사

];

아이디어는 매우 간단합니다. 즉, 배열의 첫 번째 열과 첫 번째 열의 값을 고유한 key으로 작성하는 것입니다. 위 코드가 좀 과하다고 생각됩니다. 간결한 코드는 다음과 같습니다. 🎜>

<code>$arr1 = [
    ['tracking1','abc@qq.com','80'],
    ['tracking1','abc@qq.com','50'],
    ['tracking2','efg@qq.com','60'],
    ['tracking2','efg@qq.com','30'],
];

$arr2 = [];
foreach ($arr1 as $data) {
    list($account,$mail,$val) = $data;
    isset($arr2[$account.$mail]) || $arr2[$account.$mail]=[$account,$mail,[]];
    array_push($arr2[$account.$mail][2],$val);
}
$arr2 = array_values($arr2);
var_dump($arr2);</code>
로그인 후 복사

먼저 arr1[0]이 동일한지 확인하기 위해 트래버스합니다. 동일한 경우 이를 기반으로 [1]이 동일한지 확인합니다. 동일한 경우에는 값을 삽입하고, 다른 경우에는 배열로 병합하세요.

<code>$arr = [['tracking1','abc@qq.com','80'],
['tracking1','abc@qq.com','50'],
['tracking2','efg@qq.com','60'],
['tracking2','efg@qq.com','30']];

$finalArr = [[[]]];
$mailArr =[];
foreach ($arr as $k=>$v){
    $mailKey = array_search($v[1],$mailArr);
    if($mailKey!==false){
        array_push($finalArr[$mailKey][2],$v[2]);
    }else{
        $finalArr[$k] = $v;
        $finalArr[$k][2] = [$v[2]];
        $mailArr[$k]=$v[1];
    }
}
$finalArr = array_values($finalArr);
var_dump($finalArr);
</code>
로그인 후 복사
14줄의 기능 코드, 너무 단순하지 마세요.

제 생각을 말씀드리자면 문제의 배열은 실제로 각 배열에 v0, v1 값, v2 값 두 부분으로 나누어져 있습니다.

<code>$new = array(); 
$flag = 1;
foreach ($arr as $key => $value) {
  $newss[$value[0].'-'.$value[1]][] = $value[2];  //取出重复小标0 1的值 
  $news = array($value[0], $value[1]);
  foreach ($new as $k => $v) {
    if(!array_diff($v,$news )) { //如果
      $flag = 2;
      break;
    }
  }
  if($flag == 1) {
    $new[] = array($value[0], $value[1]);
  }
  $flag = 1;
}
foreach ($new as $key => $value) {
  $new[$key][2] = $newss[$value[0].'-'.$value[1]];
}
var_dump($new);exit;</code>
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿