Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пропуск несуществующего элемента массива
Форумы портала PHP.SU » » Вопросы новичков » Пропуск несуществующего элемента массива

Страниц (1): [1]
 

1. myselfdsk - 21 Ноября, 2012 - 09:22:57 - перейти к сообщению
добра всем.

У меня такая проблема:

Есть входной 2мерный массив(квадратная матрица):
CODE (htmlphp):
скопировать код в буфер обмена
  1. пример:
  2. [0] => Array ( [0] => 99999999999999999999999 [1] => 10 [2] => 4.4721359549996 [3] => 11.313708498985 )
  3. [1] => Array ( [0] => 10 [1] => 99999999999999999999999 [2] => 9.6953597148327 [3] => 13.266499161422 )
  4. [2] => Array ( [0] => 4.4721359549996 [1] => 9.6953597148327 [2] => 99999999999999999999999 [3] => 11.045361017187 )
  5. [3] => Array ( [0] => 11.313708498985 [1] => 13.266499161422 [2] => 11.045361017187 [3] => 99999999999999999999999 ) )

На каждом шаге мне нужно удалять , например, вторую строку, второй столбец, сохранять её номер (цифру 2) и повторять снова, пока не останется лишь один элемент.
Но при этом ключи должны оставаться неизменными (с ними тоже после будут манипуляции)
Так вот, мне нужно чтобы последующие шаги не обрабатывали элементы (ключи), которых нет в массиве.
Может есть какое-то условие , чтобы это обойти.
Код могу предоставить по требованию.
2. KingStar - 21 Ноября, 2012 - 09:42:03 - перейти к сообщению
3. myselfdsk - 21 Ноября, 2012 - 11:10:59 - перейти к сообщению
KingStar пишет:

CODE (htmlphp):
скопировать код в буфер обмена
  1. for($c=0;$c<count($file_start);$c++){
  2.    for($j=0;$j<count($sost);$j++){
  3.        if ($j!==0){
  4.        $minimum[$j] = min($sost[$j]);
  5.        $minimal =  min($minimum);
  6.    $key = array_search($minimal,$sost[$j]);
  7.        if ($key !== false ){
  8.    $keys[$j]= $key;
  9.    $keys=array_unique($keys);
  10.                }
  11.            }
  12.        }
  13.  
  14.    unset ($sost);
  15.    print_r($keys);
  16.    $keys = array_values($keys);
  17.    $first=$keys[0];
  18.    $second=$keys[1];
  19.    for ($w=0;$w<count($stack2[$first]);$w++){
  20.        $stack2[$first][$w] = $stack2[$first][$w]+$stack2[$second][$w];
  21.  
  22.    }
  23.    unset ($stack2[$second]);
  24.    echo '<br>';
  25.     echo count($stack2);
  26.     echo '<br>';
  27.     $stack2 = array_values($stack2);
  28.     print_r($stack2);
  29.     $maxx= max(array_flip((array_keys($stack2))));
  30.     for ($i=0;$i<count($stack2);$i++){
  31.        if($i !== $second){
  32.        for ($k=0;$k<count($stack2);$k++){
  33.            if ($k!==$second){
  34.            $proizv = 0;
  35.            for ($a=0;$a<$elements;$a++){
  36.                $minus = $stack2[$i][$a]-$stack2[$k][$a];
  37.                $minus = pow($minus,2);
  38.                $proizv = $proizv + $minus;
  39.  
  40.            }
  41.            $proizv = sqrt($proizv);
  42.  
  43.            if ($proizv ==0)
  44.                $proizv = '99999999999999999999999';
  45.            $sost[$i][$k] = $proizv;
  46.            echo $sost[$i][$k];
  47.            echo '<br>';
  48.         }
  49.         }
  50.     }
  51.     }
  52.  
  53. }

быдло-код пока в режиме начального написания.
$sost - матрица, указанная в примере
составляется мутем математич манипуляций с переменной $stack2
На каждом шаге я нахожу в массиве sost (например, матрица 4х4) минимальный элемент, беру его координаты, объединяю их в массиве staсk2 и удаляю строку и столбец с одним из номеров, и получаю в sost матрицу уже 3х3, и так же использую её.

Вообще это кластеризация методом ближайшего соседа, и я пытаюсь сделать его реализацию на php
4. KingStar - 21 Ноября, 2012 - 11:28:37 - перейти к сообщению
Немного не понятно что ты делаешь, столько циклов - черт ногу сломит. Я бы первым делом пеершел с for на foreach, дальше по заданию

Цитата:
последующие шаги не обрабатывали элементы (ключи), которых нет в массиве


array_key_exists либо in_array



как-то так
5. myselfdsk - 21 Ноября, 2012 - 13:31:21 - перейти к сообщению
KingStar пишет:
Немного не понятно что ты делаешь, столько циклов - черт ногу сломит. Я бы первым делом пеершел с for на foreach, дальше по заданию

Цитата:
последующие шаги не обрабатывали элементы (ключи), которых нет в массиве


array_key_exists либо in_array



как-то так

Вот за foreach спасибо, что-то он из головы вылетел, реально удобней получится Улыбка
Попробую array_key_exists, может что и получится, надо проверить
6. myselfdsk - 23 Ноября, 2012 - 09:48:52 - перейти к сообщению
KingStar пишет:

if(!array_key_exists('search', $search_array)) continue;



Помогло ! Спасибо

 

Powered by ExBB FM 1.0 RC1