I'm using the FormHelper (cake 1.3) to create a select box from an array. The array uses numbers as keys but the select box ignores those numbers and uses a zero-based index for the select box option values. I've tried typing the array key to a string using both (string)$key and strval($key) with no luck. The select options work when I prepend a letter before the numeric key (i.e. 'c'.$key ) but I'd like to avoid this hack.
Is there a way to force FormHelper to use the actual numeric keys without prepending a letter? Any help would be appreciated.
See the following code for illustration:
// $category_list looks like this
Array
(
[164] => Antiques & Art
[83] => Baby/Children Needs
[176] => Boats/Marine/Fishing
[222] => Books & Magazines
[287] => Building Materials
[215] => Business
[175] => Caravans & Motor Homes
[169] => Cars & Other Vehicles
[127] => Clothing & Accessories
[92] => Computers & Electronics
[358] => Farm & Agriculture
[235] => Garage Sales/Yard Sales
[309] => Garden & Yard
[178] => General Merchandise
[138] => Health & Beauty
[186] => Hobbies & Collectables
[63] => Household
[234] => Information
[388] => Motorbikes & Scooters
[206] => Musical Instruments
[449] =&g开发者_开发问答t; Notices
[305] => Pets and Accessories
[242] => Positions Vacant
[236] => Real Estate & Rentals
[243] => Services
[143] => Sports Equipment
[308] => Tools & Equipment
[300] => Travel & Holiday
)
// Output category select box
echo $form->select(
'category',
$category_list,
$category,
array('id'=>'SearchCategories')
);
// Outputs like this
<option value="1">Antiques & Art</option>
<option value="2">Baby/Children Needs</option>
<option value="3">Boats/Marine/Fishing</option>
<option value="4">Books & Magazines</option>
...
// I'd like it to output like this
<option value="164">Antiques & Art</option>
<option value="83">Baby/Children Needs</option>
<option value="176">Boats/Marine/Fishing</option>
<option value="222">Books & Magazines</option>
...
if you stuck to conventions you should be able to do $this->Form->input('category_id') and it will just work (with passing $categories to the view). Cake does use the key of the array for the value in the select so you must be passing the wrong data.
I am guessing you have done sort() on the array which will reset all the keys. Look at the php manual for the method that sorts by value keeping keys intact, asort() iirc
精彩评论