-1

如何修改以下代码,以便将具有相同数据的单元格合并在一起(在本例中为相同的十六进制)。目前它的最大宽度为 2。

    function generateArray($from, $until, $spread){
        $from = array(hexdec(substr($from,0,2)),hexdec(substr($from,2,2)),hexdec(substr($from,4,2)));
        $until = array(hexdec(substr($until,0,2)),hexdec(substr($until,2,2)),hexdec(substr($until,4,2)));
        $red=($until[0]-$from[0])/($spread-1);
        $green=($until[1]-$from[1])/($spread-1);
        $blue=($until[2]-$from[2])/($spread-1);

        for($i=0;$i<$spread;$i++){
            $newred=dechex($from[0]+round($i*$red));
            if(strlen($newred)<2) $newred="0".$newred;

            $newgreen=dechex($from[1]+round($i*$green));
            if(strlen($newgreen)<2) $newgreen="0".$newgreen;

            $newblue=dechex($from[2]+round($i*$blue));
            if(strlen($newblue)<2) $newblue="0".$newblue;

            // Check if current hex is same as previous
            if($i >= 1 && (isset($return[$i-1]) && $return[$i-1]['hex'] == "#".$newred.$newgreen.$newblue)){
                $return[$i-1]['width']++;
            } else {
                $return[$i] = array(
                        'hex' => "#".$newred.$newgreen.$newblue,
                        'width' => 1
                );
            }

        }

        return $return;
    }

输出:

<table cellspacing="0" cellpadding="0">
<tr>
    <td bgcolor='#ffffff' width='2'></td>
<td bgcolor='#ffffff' width='1'></td>
<td bgcolor='#fefefe' width='2'></td>
<td bgcolor='#fefefe' width='2'></td>
<td bgcolor='#fdfdfd' width='2'></td>
<td bgcolor='#fdfdfd' width='2'></td>
<td bgcolor='#fcfcfc' width='2'></td>
<td bgcolor='#fcfcfc' width='2'></td>
<td bgcolor='#fbfbfb' width='2'></td>
<td bgcolor='#fbfbfb' width='2'></td>
<td bgcolor='#fafafa' width='2'></td>
<td bgcolor='#fafafa' width='2'></td>
<td bgcolor='#f9f9f9' width='2'></td>
<td bgcolor='#f9f9f9' width='1'></td>
<td bgcolor='#f8f8f8' width='1'></td>
<td bgcolor='#f6f6f6' width='1'></td>
<td bgcolor='#f3f3f3' width='1'></td>
<td bgcolor='#f1f1f1' width='1'></td>
<td bgcolor='#eeeeee' width='1'></td>
<td bgcolor='#ececec' width='1'></td>
<td bgcolor='#eaeaea' width='1'></td>
<td bgcolor='#e7e7e7' width='1'></td>
<td bgcolor='#e5e5e5' width='1'></td>
<td bgcolor='#e3e3e3' width='1'></td>
<td bgcolor='#e0e0e0' width='1'></td>
<td bgcolor='#dedede' width='1'></td>
<td bgcolor='#dbdbdb' width='1'></td>
<td bgcolor='#d9d9d9' width='1'></td>
4

1 回答 1

1

只需使用输出数组:

$ret = array();

并且每个十六进制代码都将是您的输出数组的索引:

$ret[$HEX] = $width;

如果您的 $HEX 索引始终已设置,只需增加您的“宽度”值。

if(isset($ret[$HEX]))
{
    $ret[$HEX] ++;
}
else
{
    $ret[$HEX] = 1;
}

要显示您的桌子,请使用:foreach:

foreach(generateArr(...) as $hex => $width)
{
    echo sprintf
    (
        '<td bgcolor="#%s" width"%s">&nbsp;</td>',
        $hex,$width
    );
}
于 2012-12-20T12:47:01.167 回答