Оптимизация на метод

dakata__92

Super Moderator
Колеги имам един метод в който въртя два цикъла вложени един в друг. Първият цикъл е горе долу добре измислен но проблемен ми е вторият цикъл. Прави много повече проверки от нужното и незнам как да намаля тези итерации.
PHP:
public function cleanEmptyRowsColumns()
	{
		if (!$this->replacement) {
			throw new Exception("The method ".__FUNCTION__."() is used after using remainColors(...)!");
		}
		foreach ($this->matrix as $y => $row) {
			$resultRows = array_diff($row,array($this->replacement));
			if (empty($resultRows)) {
				unset($this->matrix[$y]);
				continue;
			}
			foreach ($row as $x => $column) {
				$resultColumns = array_diff(array_column($this->matrix,$x),array($this->replacement));	
				echo"<pre> $y - ".print_r(array_column($this->matrix,$x),true).'</pre>';
				if (empty($resultColumns)) {
					unset($this->matrix[$y][$x]);
				}
			}
		}
		return $this;
	}

Проблема ми е че незнам как директно ако е празен масивът $resultColumns да unset-на цялата колона array_column($this->matrix,$x) а не просто if (empty($resultColumns)) {unset($this->matrix[$y][$x]);} което кара цикъла да върти излишно.
 
Стигнах до това решение, но отново ми се вижда, че може да има и по-добро решение. Също и по-четливо!
PHP:
public function cleanEmptyRowsColumns()
	{
		if (!$this->replacement) {
			throw new Exception("The method ".__FUNCTION__."() is used after using remainColors(...)!");
		}
		foreach ($this->matrix as $y => $row) {
			$resultRows = array_diff($row,array($this->replacement));
			if (empty($resultRows)) {
				unset($this->matrix[$y]);
				continue;
			}
			if(current($this->matrix) == $this->matrix[$y]) {
				foreach ($row as $x => $column) {
					$resultColumns = array_diff(array_column($this->matrix,$x),array($this->replacement));	
					if (empty($resultColumns)) {
						foreach (array_keys(array_column($this->matrix,$x)) as $key) {
							unset($this->matrix[$key][$x]);
						}
					}
				}
			}
		}
		return $this;
	}
 
пробвай вместо foreach c array_map и lambda функция. На теория би трябвало да е доста по-бързо и леко.
 

Back
Горе