【问题标题】:Using Associate Array to Pass Database Information with PHP and CodeIgniter使用关联数组通过 PHP 和 CodeIgniter 传递数据库信息
【发布时间】:2012-01-25 05:06:42
【问题描述】:

问题/问题:我正在使用 CodeIgniter 构建事件日历,并且包含了一个共享选项。此选项在基本级别有效,但仅在 <ul> 中显示用户 ID(主键)。这并不理想,我想在<ul> 中显示用户的名字和姓氏。我认为创建一个关联数组会起作用,但我收到了时髦的结果。当页面加载时,名字和姓氏会显示为“Array Array”,当您选择“Array Array”链接时,URL id 会显示为“Array”。我想知道我的逻辑有什么问题。

视图中生成的时髦链接:

Array Array

链接到“Array Array”的时髦 URL:

http://example.com/user/shared/view/Array

修改后的控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Shared extends Common_Auth_Controller {

    private $end_user;

    public function __construct()
    {
        parent::__construct();

        $this->end_user = $this->ion_auth->user()->row();
        $data['end_user'] = $this->end_user;
        $this->load->vars($data);

        $this->load->model('events_model', 'events');
    }

    public function index()
    {
        $title['title'] = 'Shared';

        $this->load->model('shared_model','shared');

        $data['sharers'][] = array(
                                'shared_owner_id' => $this->shared->get($this->end_user->id),
                                'owner_first_name' => $this->shared->get($this->end_user->first_name),
                                'owner_last_name' => $this->shared->get($this->end_user->last_name),
                                );

        $this->load->view('public/head_view', $title);
        $this->load->view('user/header_view');
        $this->load->view('user/shared_view', $data);
        $this->load->view('user/footer_view');
    }

修改后的视图:

<div class="hide-on-phones">
                <ul>
                    <?php foreach($sharers as $key => $value): ?>
                        <li><a href="<?php echo base_url('user/shared/view/'.$value['shared_owner_id']) ?>"><?php echo $value['owner_first_name']." ".$value['owner_last_name'] ?></a></li>
                    <?php endforeach; ?>
                </ul>
            </div>

型号:

class Shared_model extends crud_model {

    public function __construct()
    {
        parent::__construct();

        $this->pk = 'id';
        $this->table_name = 'shared';
    }

    public function get($shared_to_user_id)
    {
        $this->db->where('shared_to_id', $shared_to_user_id);
        $ids = parent::get_all();

        $users = array();

        foreach ($ids as $id)
        {

            $users[] = $id->owner_id;
        }

        return $users;
    }
}

非常感谢您的帮助,如果需要更多信息,请告诉我。下面是可以工作的原始视图和控制器,但不是可取的。

原控制人:

public function index()
    {

            $title['title'] = 'Shared';

            $this->load->model('shared_model','shared');

            $data['sharers'] = $this->shared->get($this->end_user->id);

            $this->load->view('user/head_view', $title);
            $this->load->view('user/header_view');
            $this->load->view('user/navigation_view');
            $this->load->view('user/shared_view', $data);
            $this->load->view('user/footer_view');
    }

原图:

<?php foreach($sharers as $s): ?>
    <li><a href="<?php echo base_url('user/shared/mobile/'.$s) ?>"><?php echo $s ?></a></li>
<?php endforeach; ?>

免责声明:我是 Web 开发的新手,我不擅长关联数组(显然)。

【问题讨论】:

    标签: php codeigniter loops foreach


    【解决方案1】:

    您的$data['sharers'] 数组没有$values 那样的数组。因此,您在 foreach 中调用 $value[]'s 的方式不起作用。此时您没有理由致电foreach。

    <div class="hide-on-phones">
      <ul>
        <li><a href="<?=base_url('user/shared/view/'.$sharers['shared_pk_id'])?>">
               <?=$sharers['first_name'] . ' ' . $sharers['last_name']?>
            </a>
        </li>
      </ul>
    </div>
    

    我希望你稍后会用数据填充一个数组,在这种情况下你可以将它填充为

    $data['sharers'][] = array( 
                                'shared_pk' => $this->shared->get($this->end_user->id),
                                'first_name' => $this->events->get($this->end_user->first_name),
                                'last_name' => $this->events->get($this->end_user->last_name)
                                );
    

    这又可以循环使用

    <div class="hide-on-phones">
      <ul>
        <? foreach($sharers as $sharer): ?>
        <li>
          <a href="<?=base_url('user/shared/view/' . $sharer['shared_pk'])?>">
            <?=$sharer['first_name'] . ' ' . $sharer['last_name']?>
          </a>
        </li>
        <? endforeach; ?>
      </ul>
    </div>
    

    【讨论】:

    • @Irussell810 仅多个 ID,还是多个条目?如果您要输入多个条目,我评论的第二个和最后一个代码块应该适合您。如果没有,请重新发布。
    • “它不起作用”并不能帮助我解决这个问题。它会产生什么错误?
    • 这些通知是因为未设置数组值而生成的。您可以通过在调用视图$data['sharers'][] = array('shared_pk_id' =&gt; 9000, 'first_name' =&gt; 'John', 'last_name' =&gt; 'Doe'); 之前将此数组放入控制器来测试这些是否是来自视图或控制器的错误。
    • 我更新了我的问题,以更好地解释我需要什么、我做了什么、我在做什么,并显示更清晰的资源。我希望这会有所帮助,非常感谢!
    【解决方案2】:

    如果我们获取您的$data['sharers'] 数组并为 php 输入值,那么我们会得到这样的结果:

    $data['sharers'] = array(
      0 => array(
        'id' => 1234,
        'first_name' => 'John',
        'last_name' => 'Doe'
      ),
      1 => array(
        'id' => 1235,
        'first_name' => 'Jane',
        'last_name' => 'Doe'
      )
    );
    

    因此,当您在视图中循环访问这些内容时,您需要正确访问这些内容:

    foreach($sharers as $key => $value):
        // at this point, in the first iteration of the loop
        // $key is 'id', or 'first_name', or 'last_name'
        // and $value is 1234, or 'John', or 'Doe'
    endforeach;
    

    因此,要更轻松地循环遍历共享者,您只需稍微更新一下 foreach。此时,将您的视图更改为:

    <div class="hide-on-phones">
      <ul>
        <?php foreach($sharers as $sharer): ?>
          <li>
            <a href="<?php echo base_url('user/shared/view/'.$sharer['shared_pk_id']) ?>">
              <?php echo $sharer['first_name']. " " .$sharer['last_name'] ?>
            </a>
          </li>
        <?php endforeach; ?>
      </ul>
    </div>
    

    【讨论】:

    • 在这种情况下,请查看我对答案的编辑。这应该会有所帮助!
    • 我更新了我的问题,以更好地解释我需要什么、我做了什么、我在做什么,并显示更清晰的资源。我希望这会有所帮助,非常感谢!
    【解决方案3】:

    我想通了。我需要在我的模型中创建一个关联数组;不是我的控制器。感谢大家的帮助!

    型号:

    class Shares_model extends crud_model {
    
        public function __construct()
        {
            parent::__construct();
    
            $this->pk = 'id';
            $this->table_name = 'shares';
        }
    
        public function get($shared_to_user_id)
        {
            $this->db->where('shared_to_id', $shared_to_user_id);
            $ids = parent::get_all();
    
            $users = array();
    
            foreach ($ids as $id)
            {
                $users[$id->owner_id]['owner_id'] = $id->owner_id;
                $users[$id->owner_id]['owner_first_name'] = $id->owner_first_name;
                $users[$id->owner_id]['owner_last_name'] = $id->owner_last_name;
            }
    
            return $users;
        }   
    }
    

    查看:

    <ul>
        <?php foreach($sharers as $s): ?>
            <li><a href="<?php echo base_url('user/shared/view/'.$s['owner_id']) ?>"><?php echo $s['owner_first_name']." ".$s['owner_last_name'] ?></a></li>
        <?php endforeach; ?>
    </ul>
    

    控制器:

    public function index()
        {
            $title['title'] = 'Shared';
    
            $this->load->model('shares_model','shares');
    
            $data['sharers'] = $this->shares->get($this->end_user->id);
    
            $this->load->view('public/head_view', $title);
            $this->load->view('user/header_view');
            $this->load->view('user/shared_view', $data);
            $this->load->view('user/footer_view');
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2013-01-18
      • 2019-01-11
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      相关资源
      最近更新 更多