【问题标题】:Array manipulation to create a dropdown box cakephp数组操作创建下拉框 cakephp
【发布时间】:2010-06-25 11:15:26
【问题描述】:

这是我的问题 我,我从表 states('id','state_name') 创建一个下拉列表框,这不是我的默认模型(它有很多字段,其中一个字段是 'state',我在其中存储状态('id' ) . 所以我使用 loadModel 来填充下拉框。 在我使用的控制器中

$this->loadModel('State');
$this->set('states',$this->State->find('all'));

在视图侧

$form->select('State_id',$states);

在输出中显示表名、id 和名称。

当我使用 pr() 打印 $states; 我得到的是

Array
(
    [0] => Array
        (
            [State] => Array
                (
                    [id] => 1
                    [state_name] => state1
               )

        )

    [1] => Array
        (
            [State] => Array
                (
                    [id] => 2
                    [state_name] => state2
                )

        )

等等

如何从上面的数组中创建一个像 array(1=>state1, 2=>state2) 这样的数组 或者有没有其他方法可以创建一个下拉列表框

请帮忙

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    是这样的:

    $fields = array('id','state_name');
    $states = $this->State->find('list',array('fields'=>$fields));
    $this->set(compact('states'));
    

    或一行:

    $this->set('states',$this->State->find('list',array('fields'=>array('id','state_name'))));
    

    【讨论】:

    • find('list') 是一个非常有用的选项:book.cakephp.org/view/449/find
    • 感谢您的帮助,过去两个小时我一直在努力解决它,我也会阅读上面的文章
    • 如果您执行上述操作并将$form->input('state_id') 放在您的视图中,如果Cake 可以找到您的$states 变量,它将自动创建并填充一个选择下拉列表。蛋糕很神奇。
    【解决方案2】:

    下面的代码将从原始数组创建您想要的数组

    $newstates = array();
    
    foreach($states as $state) {
        $state = $state['State']
        $newstates[$state['id']] = $state['state_name'];
    }
    
    print_r($newstates);
    

    结果:

    Array
    (
        [1] => state1
        [2] => state2
    )
    

    【讨论】:

    • 虽然这可行,但这并不是最好的方法。日后理解起来会很尴尬。更好的是使用 cakephp 包装器 - find() 的 'list' 选项。
    • 它抛出错误来访问我必须使用 $states[0]['State']['state_name'] for state1 leo 答案是我正在搜索的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多