Использование Associate Array для передачи информации о базе данных с помощью PHP и CodeIgniter - PullRequest
1 голос
/ 21 декабря 2011

Проблема / Вопрос : я использую CodeIgniter для создания календаря событий, и я включил возможность обмена.Этот параметр работает на базовом уровне, но отображает только идентификатор пользователя (первичный ключ) в <ul>.Это не идеально, и я хотел бы показать имена и фамилии пользователей вместо <ul>.Я думал, что создание ассоциативного массива будет работать, но я получаю прикольные результаты.При загрузке страницы имя и фамилия отображаются как «Массив массивов», а идентификатор URL-адреса отображается как «Массив» при выборе ссылки «Массив массивов».Мне интересно, что не так в моей логике.

Прикольная ссылка, сгенерированная в представлении :

Array Array

Прикольный URL, который связан с "Array Array":

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; ?>

Отказ от ответственности : Я новичок в веб-разработке, и я сосу на ассоциативные массивы (очевидно).

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

Ваш массив $data['sharers'] не имеет массивов как $values.Поэтому способ, которым вы называете $value[]'s в вашем foreach, не работает.У вас нет причин для вызова 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>
1 голос
/ 03 января 2012

Я понял это. Мне нужно было создать ассоциативный массив в моей модели; не мой контроллер. Спасибо всем за помощь!

Модель

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;
    }   
}

View

<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');
    }
0 голосов
/ 21 декабря 2011

Если мы возьмем ваш массив $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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...