簡體   English   中英

從PHP中的多維數組替換內部鍵

[英]Replacing inner keys from multidimensional array in 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"
  }
 }

我想用一些隨機的十六進制顏色替換值233144 (內部數組的鍵0 )。 例如,具有相同鍵( 233 )的鍵必須具有相同的十六進制顏色(例如,在上述所需解決方案中為FFF000 )。

這是我用來生成隨機十六進制顏色的函數:

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"
  }
 }

我該如何存檔?

提前致謝。

foreach ($array as &$item) {
    if (!isset($temp[$item[0]]) {
        $temp[$item[0]] = randHEXcolor();
    }
    $item[0] = $temp[$item[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;
}

使用in_arrayisset函數的解決方案:

$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
        )
)

此代碼將在遍歷數組時創建一個顏色圖。 如果需要預定義的顏色轉換,則預填充$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
)

嘗試:

<?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"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM