Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skopiowane tablice - usun element w tablicy pierwszej
Forum PHP.pl > Forum > PHP
Widmo
szukalem, ale problem jest na tyle specyficzny, ze nawet ciezko wymyslec jaki ktos dal temat...

kopiuje elementy tablicy do drugiej i gdy zmienie jakis element w tablicy jeden,
w tablicy drugiej (skopiowanej) dany element rowniez zmienia wartosc...

  1. <?php
  2. $wynik[$i]['x'] = $miasto[$aktualne]['x'];
  3. $wynik[$i]['y'] = $miasto[$aktualne]['y'];
  4.  
  5. $miasto[$aktualne]['x'] = '';
  6. $miasto[$aktualne]['y'] = '';
  7.  
  8. //tutaj dalej wartosc tablicy $wynik są już puste, a nie powinny...
  9. ?>
q
opisz dokladniej o co Ci chodzi, bo na moje jest wszystko jest tak jak powinno byc. Kod testowy:
  1. <?php
  2. $i='i';
  3. $aktualne = 'aktualne';
  4. $miasto[$aktualne]['x'] = 13;
  5. $miasto[$aktualne]['y'] = 18;
  6. $wynik[$i]['x'] = $miasto[$aktualne]['x'];
  7. $wynik[$i]['y'] = $miasto[$aktualne]['y'];
  8.  
  9. echo '<br>przed<br>';
  10. print_r($wynik);
  11. print_r($miasto);
  12.  
  13. $miasto[$aktualne]['x'] = '';
  14. $miasto[$aktualne]['y'] = '';
  15. echo '<br>po<br>';
  16. print_r($wynik);
  17. print_r($miasto);
  18. ?>


wynik:

Kod
przed
Array ( [i] => Array ( [x] => 13 [y] => 18 ) ) Array ( [aktualne] => Array ( [x] => 13 [y] => 18 ) )
po
Array ( [i] => Array ( [x] => 13 [y] => 18 ) ) Array ( [aktualne] => Array ( [x] => [y] => )


przy dodaniu znacznika referencji wszystko by sie zgadzało, ale go tu nie ma
Widmo
plik: tablica_miast.php

  1. <?
  2. $miasta = file('miasta.txt');
  3.  
  4. foreach($miasta as $key => $val)
  5. {
  6. $tmp = explode(":", $val);
  7. $miasto[$key]['x'] = $tmp[0];
  8. $miasto[$key]['y'] = $tmp[1];
  9. }
  10.  
  11. $miasta = array(); //zwolnienie pamieci
  12.  
  13. if(isset($_GET['test']))
  14. {
  15. echo '<pre>';
  16.  print_r($miasto);
  17. echo '</pre>'; 
  18.  
  19. }
  20. ?>


plik: miasta.txt

  1. 277:520
  2. 271:490
  3. 79:537
  4. 569:768
  5. 434:257
  6. 495:957
  7. 981:655
  8. 194:532
  9. 268:280
  10. 904:107
  11. 827:100
  12. 156:68
  13. 230:999
  14. 480:808
  15. 639:321
(dowolne x,y z zakresu 0-999 )


plik: funkcje.php

  1. <?php
  2. //error_reporting(E_ALL);
  3. include("tablica_miast.php"); //zwraca tablice $miasto
  4.  
  5. function min_dest($from)
  6. {
  7. global $miasto;
  8.  
  9. $x1 = $miasto[$from]['x'];
  10. $y1 = $miasto[$from]['y'];
  11.  
  12. $x2 = $miasto[$from + 1]['x'];
  13. $y2 = $miasto[$from + 1]['y'];
  14.  
  15. $x = $x1 - $y1;
  16. $y = $x2 - $y2;
  17.  
  18. $dest = sqrt( $x * $x + $y * $y );
  19.  
  20. $min_index = $from;
  21. $min = $dest;
  22.  
  23. foreach($miasto as $key => $val)
  24. {
  25.  $x2 = $miasto[$key]['x'];
  26. $y2 = $miasto[$key]['y'];
  27.  
  28.  $x = $x1 - $x2;
  29.  $y = $y1 - $y2;
  30.  
  31. $dest = round( sqrt( $x * $x + $y * $y ) );
  32.  
  33. if( $key != $from )
  34. {
  35. if( $miasto[$key]['x'] != '')
  36. {
  37. if( $dest < $min )
  38. {
  39. $min = $dest;
  40. $min_index = $key;
  41. }
  42. }
  43.  }
  44. }
  45.  
  46. return $min_index;
  47. }
  48.  
  49. $aktualne = array_rand($miasto);
  50.  
  51. for( $i = 0; $i < 10; $i++)
  52. //for( $i = 0; $i < count($miasto); $i++)
  53. {
  54. $wynik[$i]['x'] = $miasto[$aktualne]['x']; //PROBLEM !!
  55. $wynik[$i]['y'] = $miasto[$aktualne]['y']; //PROBLEM !!
  56.  
  57. echo $wynik[$i]['x'] . " = " . $miasto[$aktualne]['x'] . "<br>";
  58. echo $wynik[$i]['y'] . " = " . $miasto[$aktualne]['y'] . "<br><hr>";
  59.  
  60.  
  61.  
  62. echo "Aktualnie: " . $aktualne = min_dest($aktualne, $miasto);
  63. echo "<br>";
  64.  
  65. $miasto[$aktualne]['x'] = ''; // TU ZERUJE WARTOSC, A W TABLICY $wynik
  66. // ROBI SIĘ DOKŁADNIE TO SAMO - ZERUJE...
  67. $miasto[$aktualne]['y'] = ''; // j.w
  68.  
  69. }
  70.  
  71. ?>


wynikiem tego skrytu jest:

  1. 763 = 763
  2. 230 = 230
  3.  
  4. --------------------------------------------------------------------------------
  5. Aktualnie: 195
  6. =
  7. =
  8.  
  9. --------------------------------------------------------------------------------
  10. Aktualnie: 385
  11. =
  12. =
  13.  
  14. --------------------------------------------------------------------------------
  15. Aktualnie: 383
  16. =
  17. =
  18.  
  19. --------------------------------------------------------------------------------
  20. Aktualnie: 28
  21. =
  22. =
  23.  
  24. --------------------------------------------------------------------------------
  25. Aktualnie: 323
  26. =
  27. =
  28.  
  29. --------------------------------------------------------------------------------
  30. Aktualnie: 22
  31. =
  32. =
  33.  
  34. --------------------------------------------------------------------------------
  35. Aktualnie: 311
  36. =
  37. =
  38.  
  39. --------------------------------------------------------------------------------
  40. Aktualnie: 171
  41. =
  42. =
  43.  
  44. --------------------------------------------------------------------------------
  45. Aktualnie: 245
  46. =
  47. =
  48.  
  49. --------------------------------------------------------------------------------
  50. Aktualnie: 97


a pomiedzy "=" powinny być wartosci - czyli przypisnaia...


to o co mi chodzi zaznaczyłem w kodzie.

bede wdzieczny za rozwiazanie problemu... smile.gif
q
  1. <?php
  2. $aktualne = array_rand($miasto);
  3.  
  4. for( $i = 0; $i < 10; $i++)
  5. //for( $i = 0; $i < count($miasto); $i++)
  6. {
  7. $wynik[$i]['x'] = $miasto[$aktualne]['x']; //PROBLEM !!
  8. $wynik[$i]['y'] = $miasto[$aktualne]['y']; //PROBLEM !!
  9.  
  10. echo $wynik[$i]['x'] . " = " . $miasto[$aktualne]['x'] . "<br>";
  11. echo $wynik[$i]['y'] . " = " . $miasto[$aktualne]['y'] . "<br><hr>";
  12.  
  13.  
  14.  
  15. echo "Aktualnie: " . $aktualne = min_dest($aktualne, $miasto);
  16. echo "<br>";
  17.  
  18. $miasto[$aktualne]['x'] = ''; // TU ZERUJE WARTOSC, A W TABLICY $wynik
  19. // ROBI SIĘ DOKŁADNIE TO SAMO - ZERUJE...
  20. $miasto[$aktualne]['y'] = ''; // j.w
  21.  
  22. }
  23. ?>


problemem jest tu zmienna $aktualne
wybierasz ja raz, przypisujesz z niej wartosc, a nastepnie kasujesz $miasto[$aktualne] potem nie wybierajac kolejny raz zmiennej $aktualne odwolujesz sie do tej samej pozycji $miasto (przed chwila zostala skasowana), stad puste wpisy
wrzuc array_rand do petli, choc tu moze sie pojawic problem ze wylosujesz pusta wartosc, bo faktycznie nie usuwasz elementow tylko je zerujesz
Widmo
dzięki - coś drgneło - oprocz tego wzialem Zenda zaprzeglem do roboty,
tylko w debuggerku zent twierdzi ze wartosci stringów (te nowo tworzone z $x i $y)
sa wszedzie 'null'... normalne to?

  1. <?php
  2. $x1 = $miasto[$from]['x'];
  3. $y1 = $miasto[$from]['y'];
  4.  
  5. $x2 = $miasto[$from + 1]['x'];
  6. $y2 = $miasto[$from + 1]['y'];
  7.  
  8. $x = $x1 - $y1;
  9. $y = $x2 - $y2;
  10.  
  11. $dest = sqrt( $x * $x + $y * $y );
  12. ?>
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.