2016-07-13 3 views
1

에서 다차원 배열에서 내부 키를 교체 :다음과 같은 배열을 갖는 PHP

array(4) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(3) "233" 
    [1]=> 
    string(37) "some data" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(3) "233" 
    [1]=> 
    string(68) "some other data" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(3) "144" 
    [1]=> 
    string(38) "some other data" 
    } 
    [3]=> 
    array(2) { 
    [0]=> 
    string(3) "233" 
    [1]=> 
    string(42) "some other data" 
    } 
} 

내가 어떤 임의의 HEX 색상으로 값 233144 (내부 배열에서 키 0)를 대체합니다. 예를 들어 같은 키 (233)를 가진 것들은 동일한 HEX 색 (위의 원하는 솔루션에서 예를 들어 FFF000)을 가져야합니다.

이것은 내가 임의 HEX 색상을 생성하는 데 사용하는 기능은 다음과 같습니다

function randHEXcolor() { 
    return sprintf('%06X', mt_rand(0, 0xFFFFFF)); 
} 

내 원하는 출력은 다음과 같아야합니다

array(4) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(6) "FFF000" 
    [1]=> 
    string(37) "some data" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(6) "FFF000" 
    [1]=> 
    string(68) "some other data" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(6) "111333" 
    [1]=> 
    string(38) "some other data" 
    } 
    [3]=> 
    array(2) { 
    [0]=> 
    string(6) "FFF000" 
    [1]=> 
    string(42) "some other data" 
    } 
} 

어떻게 이것을 archieve 수 있습니까?

미리 감사드립니다.

+0

:'foreach는 ($을 같은 & $ subArr ARR)는'당신은 요소에 대한 "참조"를 얻을 당신은 루프에서 원하는 값을 변경할 수 있습니다. – ymas

+0

어떤 것을 시도했는지, 어떤 오류가있는 지 표시하십시오. – Epodax

답변

0
foreach ($array as &$item) { 
    if (!isset($temp[$item[0]]) { 
     $temp[$item[0]] = randHEXcolor(); 
    } 
    $item[0] = $temp[$item[0]]; 
} 
+0

게시물에서 읽을 수있는 것처럼, 예를 들어 같은 키 ('233')를 가진 글은 같은 16 진수 색상이어야합니다 (예 : 'FFF000' 위의 원하는 솔루션에서). 이 솔루션은 동일한 키에 대해 16 진수 색상을 제공합니다. –

+0

edit – rokas

0

모든 값이 동일한 임의의 색상으로 번역하려면, 당신은 그 색상을 저장해야합니다 :

$colors_translation = array(); 

foreach ($array as &$item) { 
    $color = $item[ 0 ]; 
    $translate = $colors_translation[ $color ]; 

    if (empty($translate)) { 
    $colors_translations[ $color ] = $translate = randHEXcolor(); 
    } 

    $item[ 0 ] = $translate; 
} 
+1

'$ translate = $ colors_translation [$ color];''Undefined index : 233'이 나타납니다. PHP 5.2를 사용하고 있기 때문에 그럴 지 모르겠습니다. 내 컴퓨터가 아닌 버전) –

+0

이미 빈 요소에 액세스 한 후'if empty' * after *를 사용하지 마십시오. – deceze

+0

PHP 버전이 아니라 고지를 표시하는 설정입니다. @deceze가 옳다.'isset()'또는'array_key_exists()'를 사용하여 값이 존재하는지 검사한다. – yoavmatchulsky

-1

시도 :

<?php 
$array = array(
    0 => array(
     0 => "233", 
     1 => "some data" 
    ), 
    1 => array(
     0 => "233", 
     1 => "some data" 
    ), 
    2 => array(
     0 => "144", 
     1 => "some data" 
    ), 
    3 => array(
     0 => "233", 
     1 => "some data" 
    ), 
); 
function randHEXcolor() { 
    return sprintf('%06X', mt_rand(0, 0xFFFFFF)); 
} 
$firstHex = randHEXcolor(); 
$secondHex = randHEXcolor(); 

foreach($array as $arrayIndex => &$arrayValue){ 
    if($arrayValue[0] == "144"){ 
     $arrayValue[0] = $firstHex; 
    } 
    if($arrayValue[0] == "233"){ 
     $arrayValue[0] = $secondHex; 
    } 
} 

출력 :

array(4) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(6) "AB8248" 
    [1]=> 
    string(9) "some data" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(6) "AB8248" 
    [1]=> 
    string(9) "some data" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(6) "22AF8B" 
    [1]=> 
    string(9) "some data" 
    } 
    [3]=> 
    &array(2) { 
    [0]=> 
    string(6) "AB8248" 
    [1]=> 
    string(9) "some data" 
    } 
} 
0

in_array을 사용하는 용액은 D isset 함수 :

$keys = []; 
foreach ($arr as &$v) { // $arr is your initial array 
    if (in_array($v[0], ['233', '144'])) { 
     if (!isset($keys[$v[0]])) $keys[$v[0]] = sprintf('%06X', mt_rand(0, 0xFFFFFF)); 
     $v[0] = $keys[$v[0]]; 
    } 
} 

print_r($arr); 

출력 : 어레이가 이송 될 때이 코드는 컬러 맵을 생성한다

Array 
(
    [0] => Array 
     (
      [0] => 65A4BB 
      [1] => some data 
     ) 

    [1] => Array 
     (
      [0] => 65A4BB 
      [1] => some data 
     ) 

    [2] => Array 
     (
      [0] => DDB588 
      [1] => some data 
     ) 

    [3] => Array 
     (
      [0] => 65A4BB 
      [1] => some data 
     ) 
) 
0

. 미리 정의 된 색상 변환이 필요한 경우 $colorMap을 미리 채 웁니다.

<?php 

$array = array(
    0 => array(
     0 => "233", 
     1 => "some data" 
    ), 
    1 => array(
     0 => "233", 
     1 => "some data" 
    ), 
    2 => array(
     0 => "144", 
     1 => "some data" 
    ), 
    3 => array(
     0 => "233", 
     1 => "some data" 
    ), 
); 

$colorMap = array(); 

foreach ($array as &$inner) { 
    if (!array_key_exists($inner[0],$colorMap)) { 
     $newColor = randHEXcolor(); 
     $colorMap[$inner[0]] = $newColor; 
     $inner[0] = $newColor; 
    } else { 
     $inner[0] = $colorMap[$inner[0]]; 
    } 
} 

function randHEXcolor() { 
    return sprintf('%06X', mt_rand(0, 0xFFFFFF)); 
} 

print_r($array); 
print_r($colorMap); 
당신이 경우에
Array 
(
    [0] => Array 
     (
      [0] => F1519A 
      [1] => some data 
     ) 

    [1] => Array 
     (
      [0] => F1519A 
      [1] => some data 
     ) 

    [2] => Array 
     (
      [0] => 2F7D00 
      [1] => some data 
     ) 

    [3] => Array 
     (
      [0] => F1519A 
      [1] => some data 
     ) 

) 

Array 
(
    [233] => F1519A 
    [144] => 2F7D00 
) 
관련 문제