function is_existELEM($X)
{
$K = array();
for ($q=0; $q < count($X); $q++) {
for ($z=0; $z < count($X[0]); $z++) {
$K[$q][$z] = -1;
}
}
$s = false;
$t = false;
for ($i=0; $i < count($X); $i++) {
for ($j=0; $j < count($X[0]); $j++) {
if($X[$i][$j]==-1) continue;
else
{
$k=$i;
$l=$j;
// do{
for ($k=0; $k < count($X[0]); $k++) {
if($X[$i][$k] != -1) $s = true;
else $s = false;
}
// $f++;
// } while($f<count($X[0]));
// do{
for ($l=0; $l < count($X); $l++) {
if($X[$l][$j] != -1) $t = true;
else $t = false;
}
// $d++;
// } while($d<count($X));
if($s && $t) $K[$i][$j] = $X[$i][$j];
else $X[$i][$j]=-1;
printmatrix($X);
echo "<br><br>";
}
}
}
return $K;
}
Но работает она не совсем правильно.
Подскажите,пожалуйста. У меня есть двумерный массив:
$X = array(
array(90,-1,20),
array(-1,300,100),
array(50,-1,60)
);
Необходимо пройти по матрице пропуская -1 и для каждого элемента (не равного -1) проверить, есть ли ещё элементы в строке и столбце не равные -1. Если есть, то записать элемент (для которого искали) в дв. массив $K. Иначе приравнять этот элемент (для которого искали) к -1, то есть $X[$i][$j]=-1 и перейти к следующему элементу.
Например если матрица $X такая:
$X = array(
array(90,-1,20),
array(-1,300,100),
array(50,-1,60)
);
то первый элемент на пути (не равный -1) будет 90. Для 90 надо проверить, есть ли на этой строке хоть один элемент не равный -1 И так же на столбце, где стоит 90. В нашем случае, на строке стоит 20, на столбце 50, следовательно, запоминаем 90 (с теми же индексами) в массив $K, то есть $K[$i][$j]=$X[$i][$j] и переходим к следующему элементу. Следующий элемент 20 (для него на строке стоит 90, на столбце 100 и 60), следовательно запоминаем. Далее 300, на строке 100, а на столбце нету элемента неравного -1, следовательно присваиваем 300 значение -1, то есть $X[$i][$j]=-1; Далее 100, на столбце 20 и 60, а на строке НЕТ элементов,так как 300 уже стал -1 на предыдущем шаге цикла. И тд. На выходе должен получиться массив $K вида
$X = array(
array(90,-1,20),
array(-1,-1,-1),
array(50,-1,60)
);
Проблема в том, что не могу понять, как двинуть цикл назад, если, например, мы на элементе 20 в $X как понять, что для него на строке есть 90. Или на элементе 60, как понять, что для 60 на строке есть 50, а на столбце 20.
Буду рад любой помощи! Спасибо!