Michał M.

Michał M. Ja nie przedmiot,
żeby opisywać :)

Temat: Tablica i wyświetlanie w select niepustych elementów

Vitam :)

Mam taki kod

<?

$tablica1 = Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
$tablica2 = Array(1,3,7,12);
$ile_1 = count($tablica1);

$diff=array_diff($tablica1,$tablica2);

?>

<select name="user_id">

<?
$n=0;
while ($n < $ile_1){
?>

<option value="<? echo $diff[$n]; ?>"> <? if ($diff[$n]!='') {echo $diff[$n];} ?> </option>

<?
$n++;
}
echo "</select>";
?>


Niestety if ($diff[$n]!='') {echo $diff[$n]; niesprawdza się w usuwaniu pustych indexów. Jakieś pomysły?

konto usunięte

Temat: Tablica i wyświetlanie w select niepustych elementów

Michał Mackiewicz-Kacprzak:
$ile_1 = count($tablica1);

dlaczego $ile_1 jest długością $tablica1 zamiast $diff?
Michał M.

Michał M. Ja nie przedmiot,
żeby opisywać :)

Temat: Tablica i wyświetlanie w select niepustych elementów

Oktawia Malec:
Michał Mackiewicz-Kacprzak:
$ile_1 = count($tablica1);

dlaczego $ile_1 jest długością $tablica1 zamiast $diff?

Dlatego, iż array_diff w przypadku trafienia na powtarzajacy się element w dwóch tablicach przypisuje do $diff wartość pustą. Natomiast przy zliczaniu elementów count($diff) zlicza te niepuste.

Efekt jest taki że, tablica $diff ma indexów (w nawiazaniu do przykładu ktory podałem) 16 a gdybym przypisał $ile_1 = count($diff) wyświetli mi pierwsze 12 wartości tablicy (razem z pustymi gdy usunę ifa) czyli zjada mi ostatnie 4 indexy tablicy :)

PS. Problem rozwiązany. If trzeba zastosować do całego znacznika option :)Michał Mackiewicz-Kacprzak edytował(a) ten post dnia 31.10.08 o godzinie 14:45

konto usunięte

Temat: Tablica i wyświetlanie w select niepustych elementów

może tak:

<?php
$tablica1 = Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
$tablica2 = Array(1,3,7,12);
//$ile_1 = count($tablica1);

$diff=array_diff($tablica1,$tablica2);
/*
echo '<br /><br />tablica1<br />';
var_dump($tablica1);
echo '<br /><br />tablica2<br />';
var_dump($tablica2);
echo '<br /><br />diff<br />';
var_dump($diff);
echo count($diff);
echo '<br />';
echo '<br />';
echo count($tablica1);
*/
?>
<select name="user_id">
<?php
foreach($diff as $d) {
?>
<option value="<? echo $d; ?>"> <? echo $d; ?> </option>
<?php
}
echo "</select>";
?>


//edit
w tym wypadku nie potrzeba żadnego if'a, zmiennej $n ani $ile_1
poza tym array_diff nie wstawia żadnych pustych wartości tylko pozostawia indexy takie jakie były orginalnie w pierwotnej tabeliOktawia Malec edytował(a) ten post dnia 04.11.08 o godzinie 19:40
Michał M.

Michał M. Ja nie przedmiot,
żeby opisywać :)

Temat: Tablica i wyświetlanie w select niepustych elementów

Dziękuję :) Zdecydowanie lepszy kod niż mój ;) Oczywiście po wywaleniu komentarzy ;)

konto usunięte

Temat: Tablica i wyświetlanie w select niepustych elementów

a moze po prostu empty() albo isset()..
Tomasz Skaraczyński

Tomasz Skaraczyński projektant,
programista, ATP
Skaraczyński Tomasz

Temat: Tablica i wyświetlanie w select niepustych elementów

Michał Mackiewicz-Kacprzak:
Niestety if ($diff[$n]!='') {echo $diff[$n]; niesprawdza się w usuwaniu pustych indeksów. Jakieś pomysły?
Po pierwsze nie nazywałbym tego pustymi indeksami. Po drugie przy tego typu porównaniach trzeba zwrócić uwagę na automatyczne konwersje PHP. Krótkie przypomnienie więc

a) null == '' => true, bo wartość null konwertowana jest na 0, tak samo jak łańcuch pusty.
b) null === '' => false, bo sprawdzana jest dodatkowo zgodność typów.

Jeżeli miałeś 'puste indeksy' to powyższym warunkiem na pewno ich nie wyłapiesz.
Michał M.

Michał M. Ja nie przedmiot,
żeby opisywać :)

Temat: Tablica i wyświetlanie w select niepustych elementów

Tomasz Skaraczyński:
Michał Mackiewicz-Kacprzak:
Niestety if ($diff[$n]!='') {echo $diff[$n]; niesprawdza się w usuwaniu pustych indeksów. Jakieś pomysły?
Po pierwsze nie nazywałbym tego pustymi indeksami. Po drugie przy tego typu porównaniach trzeba zwrócić uwagę na automatyczne konwersje PHP. Krótkie przypomnienie więc

a) null == '' => true, bo wartość null konwertowana jest na 0, tak samo jak łańcuch pusty.
b) null === '' => false, bo sprawdzana jest dodatkowo zgodność typów.

Jeżeli miałeś 'puste indeksy' to powyższym warunkiem na pewno ich nie wyłapiesz.

Ten warunek mi wyłapywał 'puste indeksy' o ile nie były wyświetlane w select. Ktoś mi zwrócił uwagę na to że tym warunkiem musiałem objąć cały znacznik option wtedy działa prawidłowo :)

Natomiast Oktawia podsunęła mi krótszy kod z którego korzystam w chwili obecnej i nie mam problemów :)

Następna dyskusja:

Usuwanie elementów z tablicy




Wyślij zaproszenie do