лишний (?) элемент в массиве

usascha

Новичок
лишний (?) элемент в массиве

Создаю вручную массив:
PHP:
$stat=array("mkt"=>"верстка",
		"prn"=>"в печати",
		"sell"=>"в продаже");
делаю count($stat); выдает - 4.
смотрю var_export выдает array ( 'mkt' => 'верстка', 'prn' => 'в печати', 'sell' => 'в продаже', 0 => '', )

А зачем мне кузнец? т.е. 0. Почему он вообще есть и как его убрать?
 

Alex2003

Новичок
stat - название функции, кстати... а по-теме - у меня вырисовывает "3". Грабли Вы нам не показали в посте.
 

sakon

П..и.н..ок
PHP:
<?php
$stat=array("mkt"=>"верстка", 
        "prn"=>"в печати", 
        "sell"=>"в продаже");

print_r($stat);
?>
Выдает
Array ( [mkt] => верстка [prn] => в печати [sell] => в продаже )
 

usascha

Новичок
С ошибкой разобрался - сам дурак.

но проблема кода не решается. Пытаюсь сделать банальный выбор текущего значения из выпадающего меню.

PHP:
$st = mysql_query...
$statt=array("mkt"=>"верстка",
			"prn"=>"в печати",
			"sell"=>"в продаже");
while ($row = mysql_fetch_array($st)) {
	$status = $row['statu'];
}
for ($s=0; $s<count($statt); $s++) {
?>
<option value="<? echo $statt[$s];?>" ><?echo $statt[$s];?></option>

<? $s++; 
}
?>
</select>
Если словами, то звучит так: есть три возможных значения - формируют выпадающее меню. Из базы выбирается текущее значение и делается активным в этом меню. Для меня проблема в том, чтобы пользователю были видны человеческие значения - "верстка", "в печати", "в продаже".
Т.к. их в базе не храню, то тут и затык вышел.
 

rotoZOOM

ACM maniac
Давай попробую догадаться ... в выпадающем меню у тебя всего 2 значения "верстка" и "в продаже" ?
Учи работу циклов.
 

chisto_tolyan

Враг народа
<?
<SELECT NAME="bu">
?>
for ($s=0; $s<count($statt); $s++) {
$sel = "";
if($s == $row["curvalue"]){$sel = " SELECTED";}
?>
<option value="<? echo $statt[$s];?>"<?echo $sel;?>><?echo $statt[$s];?></option>

<? $s++;
}
?>
</select>

вроде єто то, что тебе нужно...
 

sakon

П..и.н..ок
usascha
chisto_tolyan
Объясните назначение в цикле строки
PHP:
$s++;
и после этого бегом делать то, что сказал rotoZOOM
 

usascha

Новичок
$s++; - это я не удалил от предыдущего варианта кода. звиняйте, хлопци.

Элементов всего три. У меня сложность в том, чтобы в цикле привязать значение из базы к одному из значений в выпадающем меню.
 

usascha

Новичок
в том-то и проблема что я сам точно не знаю как это назвать.

Попробую еще раз. Есть три значения (не в базе) в выпадающем меню (написаны выше). Из базы выбирается действуюшее значение, например, mkt, т.е. в меню - верстка. В форме выводится меню с выбранным значением - верстка. При submit'е формы измененное значение меню заносится в базу.
 

Serguitar

Новичок->продвинутый
usascha
Значит делаешь так:
1. Выбираешь из базы действующее значение и айди элемента.
2. Выводишь в цикле свои три таким образом, чтобы если одно из них соответствует выбранному из базы, пишем его чекнутым, а айди записываешь в хидден.
3. При изменении значения и сабмите делаешь апдэйт того элемента, айди которого в базе равен полученному из формы.
 

rotoZOOM

ACM maniac
тогда можно так для твоего случая:
PHP:
$statt=array("mkt"=>"верстка", 
        "prn"=>"в печати", 
        "sell"=>"в продаже");
// $str - тут хранится выбранное из базы значение
foreach ($stat as $ind => $val){
     $sel="";
     if ($str==$ind)$sel="selected";
     echo "<option value=\"$val\" $sel>$val</option>";
}
 

Serguitar

Новичок->продвинутый
rotoZOOM
Что ж ты ему и функцию апдэйта не написал? Давай уже готовый рабочий код, что ли?
 

usascha

Новичок
rotoZOOM, большое человеческое спасибо. Знаю, что массивы - моя слабость... в смысле, что слабо знаю. :) Но стараюсь постичь премудрости.




Serguitar, апдейт у меня и так есть, он сделан через js. А вообще, думаю, что эта тема будет и другим полезна, не только же я учусь.
 
Сверху