Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][array] Łączenie dwóch tablic
Forum PHP.pl > Forum > PHP
bim2
Witam, dopracowuje swoją klasę do szukania najkrótszej drogi (teraz szuka po skosach smile.gif ). I mam następujący problem. Załóżmy że ciągle idę w dól więc:
x,y = 0,0
x,y = 0,1
x,y = 0,2
x,y = 1,3 //tutaj nagle idę na ukos

Ale postanawiam dołączyć między (0,2) a (1,3) jedną wartość (0,3). Jak mam ją tam wcisnąć? smile.gif Nie mam już pomysłów worriedsmiley.gif

Może ktoś mądrzejszy będzie wiedział. smile.gif
Darti
  1. <?php
  2. $all = array(array(0,0),array(0,1),array(0,2),array(1,3));
  3.  
  4.  
  5. function wcisnij($punkt_przed,$nowy_punkt,$tablica = array()){
  6.    
  7.    $pozycja_przed = array_search($punkt_przed,$tablica);
  8.    
  9.    $a = array_slice($tablica,0,$pozycja_przed + 1);
  10.    $b = array_slice($tablica,$pozycja_przed + 1);
  11.    
  12.    $a[] = $nowy_punkt;
  13.    $wynik = array_merge($a,$b);
  14.    
  15.    return $wynik;
  16. }
  17.  
  18. print_r(wcisnij(array(0,2),array(0,3),$all));
  19. ?>


p.s. a jak nie zna się punktow, "pomiedzy" które trzeba ten nowy wcisnac to prosze:

  1. <?php
  2. $all = array(array(-1,-1),array(0,0),array(0,1),array(0,2),array(1,3));
  3.  
  4. function wcisnij($punkt_przed,$nowy_punkt,$tablica = array()){
  5.    
  6.    $pozycja_przed = array_search($punkt_przed,$tablica);
  7.    
  8.    $a = array_slice($tablica,0,$pozycja_przed + 1);
  9.    $b = array_slice($tablica,$pozycja_przed + 1);
  10.    
  11.    $a[] = $nowy_punkt;
  12.    $wynik = array_merge($a,$b);
  13.    
  14.    return $wynik;
  15. }
  16.  
  17. function znajdz_punkt_przed($nowy_punkt,$tablica){
  18.    
  19.    list($nowy_x,$nowy_y) = $nowy_punkt;
  20.    
  21.    foreach ($tablica as $key=>$value){
  22.        list($obecny_x,$obecny_y) = $value;
  23.        list ($nastepny_x,$nastepny_y) = $tablica[$key+1];
  24.        
  25.        //wykrywamy skos
  26.        if(abs($obecny_x - $nastepny_x + $obecny_y - $nastepny_y) == 2){
  27.            // sprawdzam, czy podany punkt ulokuje się na kolanku zastepujac skos
  28.            if((abs($obecny_x-$nowy_x + $obecny_y - $nowy_y) == 1) && (abs($nastepny_x - $nowy_x + $nastepny_y - $nowy_y) == 1)){
  29.                //echo " <-- za tym elementem mozna wstawic kolanko";
  30.                return array($obecny_x,$obecny_y);
  31.            }            
  32.        }        
  33.    }    
  34. }
  35.  
  36. print_r(wcisnij(znajdz_punkt_przed(array(0,3),$all),array(0,3),$all));
  37. print_r(wcisnij(znajdz_punkt_przed(array(-1,0),$all),array(-1,0),$all));
  38. ?>
bim2
baaardzo dziękuję ;*

Podpasowałem sobie pod klasę i ładnie śmiga :] Naprawdę bardzo dziękuję, na szczeście po CSie mi się łepetynka odswiezyła. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.