core-bundle/src/Resources/contao/widgets/RadioTable.php
public function generate()
	{
		if (empty($this->arrOptions) || !\is_array($this->arrOptions))
		{
			return '';
		}

		$rows = ceil(\count($this->arrOptions) / $this->intCols);
		$return = '<table id="ctrl_'.$this->strName.'" class="tl_radio_table'.(($this->strClass != '') ? ' ' . $this->strClass : '').'">';

		for ($i=0; $i<$rows; $i++)
		{
			$return .= '
    <tr>';

			// Add cells
			for ($j=($i*$this->intCols); $j<(($i+1)*$this->intCols); $j++)
			{
				$value = $this->arrOptions[$j]['value'];
				$label = $this->arrOptions[$j]['label'];

				if (\strlen($value))
				{
					$label = Image::getHtml($value.'.svg', $label, 'title="'.StringUtil::specialchars($label).'"');
					$return .= '
      <td><input type="radio" name="'.$this->strName.'" id="'.$this->strName.'_'.$i.'_'.$j.'" class="tl_radio" value="'.StringUtil::specialchars($value).'" onfocus="Backend.getScrollOffset()"'.$this->isChecked($this->arrOptions[$j]).$this->getAttributes().'> <label for="'.$this->strName.'_'.$i.'_'.$j.'">'.$label.'</label></td>';
				}

				// Else return an empty cell
				else
				{
					$return .= '
      <td></td>';
				}
			}

			// Close row
			$return .= '
    </tr>';
		}

		return $return . '
  </table>';
	}
public function generate()
	{
		if (empty($this->arrOptions) || !\is_array($this->arrOptions))
		{
			return '';
		}

		$rows = ceil(\count($this->arrOptions) / $this->intCols);
		$return = '<table id="ctrl_'.$this->strName.'" class="tl_radio_table'.(($this->strClass != '') ? ' ' . $this->strClass : '').'">';

		for ($i=0; $i<$rows; $i++)
		{
			$return .= '
    <tr>';

			// Add cells
			for ($j=($i*$this->intCols); $j<(($i+1)*$this->intCols); $j++)
			{
				$value = $this->arrOptions[$j]['value'];
				$label = $this->arrOptions[$j]['label'];

				if (\strlen($value))
				{
					$label = Image::getHtml($value.'.svg', $label, 'title="'.StringUtil::specialchars($label).'"');
					$return .= '
      <td><input type="radio" name="'.$this->strName.'" id="'.$this->strName.'_'.$i.'_'.$j.'" class="tl_radio" value="'.StringUtil::specialchars($value).'" onfocus="Backend.getScrollOffset()"'.$this->isChecked($this->arrOptions[$j]).$this->getAttributes().'> <label for="'.$this->strName.'_'.$i.'_'.$j.'">'.$label.'</label></td>';
				}

				// Else return an empty cell
				else
				{
					$return .= '
      <td></td>';
				}
			}

			// Close row
			$return .= '
    </tr>';
		}

		return $return . '
  </table>';
	}
Generate the widget and return it as string

@return string