usunięcie całego wiersza tabeli zmiennych PHP

0

Witam.

Jak usunąć jeden wiersze ze środka tabeli:
$_SESSION['koszyk'][0]
$_SESSION['koszyk'][1]
$_SESSION['koszyk'][2]
$_SESSION['koszyk'][3]

Przy użyciu:

unset($_SESSION['koszyk'][2]);

mam dziurę pomiędzy $_SESSION['koszyk'][1] - $_SESSION['koszyk'][3].
Ale zależy mi na tym aby po usunięciu $_SESSION['koszyk'][2] zachowana byłą ciągłość numeracji.

0

Znalazłem coś takiego:

function array_delete($idx,$array) {  
    unset($array[$idx]);  
    return (is_array($array)) ? array_values($array) : null;  
}

$array["koszyk"][0] = array ("kod"=>"111","ilosc"=>"20");
$array["koszyk"][1] = array ("kod"=>"222","ilosc"=>"10");
$array["koszyk"][2] = array ("kod"=>"333","ilosc"=>"2");
$array["koszyk"][3] = array ("kod"=>"444","ilosc"=>"18");
$array["koszyk"][4] = array ("kod"=>"555","ilosc"=>"15");
$array["koszyk"][5] = array ("kod"=>"666","ilosc"=>"3");



print_r(array_values($array["koszyk"]));

$array = array_delete("3",$array["koszyk"]);

print_r("<br><br>".array_values($array["koszyk"]));

Jednak przy próbie w http://phptester.net/ wyświetla mi:

Array ( [0] => Array ( [kod] => 111 [ilosc] => 20 ) [1] => Array ( [kod] => 222 [ilosc] => 10 ) [2] => Array ( [kod] => 333 [ilosc] => 2 ) [3] => Array ( [kod] => 444 [ilosc] => 18 ) [4] => Array ( [kod] => 555 [ilosc] => 15 ) [5] => Array ( [kod] => 666 [ilosc] => 3 ) )
NOTICE Undefined index: koszyk on line number 21

WARNING array_values() expects parameter 1 to be array, null given on line number 21

0
$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */
0

Próbujesz wyświetlić $array["koszyk"], a przecież robisz $array = array_delete(3,$array["koszyk"]); Czyli arrayowi przypisujesz to co zwraca twoja funkcja, a ona zwraca tablicę indexowaną, więc $array["koszyk"] już nie istnieje. To pierwszy problem. Drugi jest taki, że dostaniesz Array to string conversion przez to, że chcesz to połączyć .. Wywal <br> z print_r i zaimeń array["koszyk" na samo array

1

@mati1988k pokręciłeś w jednej linijce. Znajdź dwie różnice:

function array_delete($idx,$array) {  
    unset($array[$idx]);  
    return (is_array($array)) ? array_values($array) : null;  
}
 
$array["koszyk"][0] = array ("kod"=>"111","ilosc"=>"20");
$array["koszyk"][1] = array ("kod"=>"222","ilosc"=>"10");
$array["koszyk"][2] = array ("kod"=>"333","ilosc"=>"2");
$array["koszyk"][3] = array ("kod"=>"444","ilosc"=>"18");
$array["koszyk"][4] = array ("kod"=>"555","ilosc"=>"15");
$array["koszyk"][5] = array ("kod"=>"666","ilosc"=>"3");
 
 
 
print_r(array_values($array["koszyk"]));
 
$array["koszyk"] = array_delete(3, $array["koszyk"]);

echo "<br><br>";
print_r(array_values($array));
0

Hej.

Co do wywalenia array["koszyk"] to chyba musi tak zostać ponieważ przechowuje to jako zmienna sesji $_SESSION['koszyk']...

Takie coś działa:

$array["koszyk"][0] = array ("kod"=>"111","ilosc"=>"20");
$array["koszyk"][1] = array ("kod"=>"222","ilosc"=>"10");
$array["koszyk"][2] = array ("kod"=>"333","ilosc"=>"2");
$array["koszyk"][3] = array ("kod"=>"444","ilosc"=>"18");
$array["koszyk"][4] = array ("kod"=>"555","ilosc"=>"15");
$array["koszyk"][5] = array ("kod"=>"666","ilosc"=>"3");
 
unset($array["koszyk"][2]);


var_dump($array);
print_r("<br><br>");

$array["koszyk"] = array_values($array["koszyk"]);
 
var_dump($array);

/*
array(1) { ["koszyk"]=> array(5) { [0]=> array(2) { ["kod"]=> string(3) "111" ["ilosc"]=> string(2) "20" } [1]=> array(2) { ["kod"]=> string(3) "222" ["ilosc"]=> string(2) "10" } [3]=> array(2) { ["kod"]=> string(3) "444" ["ilosc"]=> string(2) "18" } [4]=> array(2) { ["kod"]=> string(3) "555" ["ilosc"]=> string(2) "15" } [5]=> array(2) { ["kod"]=> string(3) "666" ["ilosc"]=> string(1) "3" } } } 

array(1) { ["koszyk"]=> array(5) { [0]=> array(2) { ["kod"]=> string(3) "111" ["ilosc"]=> string(2) "20" } [1]=> array(2) { ["kod"]=> string(3) "222" ["ilosc"]=> string(2) "10" } [2]=> array(2) { ["kod"]=> string(3) "444" ["ilosc"]=> string(2) "18" } [3]=> array(2) { ["kod"]=> string(3) "555" ["ilosc"]=> string(2) "15" } [4]=> array(2) { ["kod"]=> string(3) "666" ["ilosc"]=> string(1) "3" } } }
*/

Ale w domu sprawdzę czy działa też u mnie na stronie :D :)

1

print_r("

");

A to co ma niby oznaczać. Czytając manuala dowiesz się, że print_r

Prints human-readable information about a variable
. Więc drukujesz informacje na temat zmiennej "<br><br>" - jest to bez sensu. Użyj po prostu echo

1 użytkowników online, w tym zalogowanych: 0, gości: 1