Vòng lặp PHP thông qua đối tượng stdClass

  • diễn đàn El
    Khách
  •  

26-06-2011, 11. 49 giờ sáng


[eluser]developer10[/eluser]
Về cơ bản, tôi khá thất vọng vì thực tế là mỗi khi tôi phải mã hóa cứng phân trang của mình bất cứ khi nào (và điều đó hầu như luôn luôn xảy ra) tôi muốn sử dụng một số bộ lọc (danh mục, chữ cái bắt đầu, v.v.) trong kết quả của mình trước khi kết quả cuối cùng được trình bày

Vấn đề chính ở đây là (IMHO) không có cách nào dễ dàng (nhưng hay) để lấy cả hai số lượng bản ghi (mà $config['total_rows'] sẽ sử dụng) của tập kết quả đó (khi áp dụng bộ lọc) và có số lượng bản ghi hạn chế

Vì vậy, trong một thời gian dài, tôi đã phải vật lộn để tìm ra một cách có thể chấp nhận được để sử dụng mọi lúc
Đây là như xa như tôi đã nhận được

Mô hình của tôi

Mã số

function loadArtists($type, $letter, $uriOffset, $limit)
    {
        $query = "SELECT * FROM _tbl_artists WHERE ";
            if($type)
                $query .= "_artist_category = $type AND ";
            
            if($letter)
                $query .= "_ARTIST_NAME LIKE '$letter%' AND ";
        
        $query .= " id > 0 ORDER BY _ARTIST_NAME ASC ";
        
        if ($uriOffset)
            $limited = $query . " LIMIT $uriOffset, $limit";
        else
            $limited = $query;
        
        $noLimit = $this->db->query($query);
        $withLimit = $this->db->query($limited);
        
        $numRows = $noLimit->num_rows();
        $resultStack = array();
        $resultStack = array($numRows);
        
        
        if($withLimit->num_rows() > 0)
        {
            $result = $withLimit->result();
        }
        
        array_push($resultStack, $result);
        
        return $resultStack; //$resultStack;
    }


Bây giờ, khi tôi gửi tập kết quả này đến chế độ xem của mình (trước đó, trong bộ điều khiển của tôi, tôi lấy ra số lượng bản ghi cần thiết cho $config['total_rows ']), tôi không thể tìm ra cách lấy một phần dữ liệu tôi cần

Đây là đầu ra của tập kết quả trên

Mã số

Array
(
    [0] => 148
    [1] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 347
                    [_ARTIST_NAME] => EDIN CARIC
                    [_ARTIST_SEO_NAME] => edin-caric
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 3325
                )

            [1] => stdClass Object
                (
                    [id] => 348
                    [_ARTIST_NAME] => EDIN DENI OMEROVIC
                    [_ARTIST_SEO_NAME] => edin-deni-omerovic
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 3326
                )

            [2] => stdClass Object
                (
                    [id] => 349
                    [_ARTIST_NAME] => EDIN PASIC
                    [_ARTIST_SEO_NAME] => edin-pasic
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 3328
                )

            [3] => stdClass Object
                (
                    [id] => 3069
                    [_ARTIST_NAME] => EDIN UZUN EDY
                    [_ARTIST_SEO_NAME] => edin-uzun-edy
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 31693
                )

            [4] => stdClass Object
                (
                    [id] => 350
                    [_ARTIST_NAME] => EDIS I HARIS
                    [_ARTIST_SEO_NAME] => edis-i-haris
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 3330
                )

            [5] => stdClass Object
                (
                    [id] => 351
                    [_ARTIST_NAME] => EDISA
                    [_ARTIST_SEO_NAME] => edisa
                    [_artist_category] => 0
                    [_ID_ORIGINAL] => 3340
                )

        )
)


Tôi hoàn toàn không quen thuộc với PHP stdClass và tôi đã thử một số tùy chọn để chuyển đổi nó thành mảng nhưng không có kết quả

OK, vậy thứ tôi cần từ đối tượng là _ARTIST_NAME hoặc dữ liệu khác từ cấp độ đó

Mọi người có góp ý gì thì post lên

  • diễn đàn El
    Khách
  •  

29-06-2011, 11. 15 giờ sáng


[eluser]developer10[/eluser]
[quote author="adityamenon" date="1309132737"]Chà, tôi chưa bao giờ gặp phải trường hợp nào như thế này, nhưng điều gì xảy ra khi bạn làm điều này?

Mã số

//$topLevelArray is the main Array() you posted as output
$object = $topLevelArray[1][0]; //you get those keys by using a foreach loop
$artistName = $object->_ARTIST_NAME;


Tôi biết bạn có thể đã thử điều đó, nhưng tôi chỉ tò mò về lỗi bạn gặp phải. [/trích dẫn]


Vâng, đây là lỗi

Mã số

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: artists/artistsView.php

Line Number: 26


CHỈNH SỬA. Tôi đã bỏ lỡ điều gì đó khi áp dụng mã của bạn, nhưng khi thực hiện đúng, điều này có vẻ hiệu quả

Giờ đây, thật dễ dàng để sử dụng số lượng bản ghi được mang theo cùng với tập kết quả
để hiển thị số lượng bản ghi đã xem

Cảm ơn sự giúp đỡ của bạn

  • diễn đàn El
    Khách
  •  

29-06-2011, 12. 23 giờ chiều


[eluser]developer10[/eluser]
[quote author="adityamenon" date="1309386230"]Chúc mừng. Nhân tiện, hôm nay tôi đã tìm thấy một cách khác trên StackOverflow

Mã số

//put your object in place of $object and you might it in array form in $array...
$array = json_decode(json_encode($object), true);


...you might want to check that out too
Vòng lặp PHP thông qua đối tượng stdClass
[/quote]

Trên thực tế, tôi đã làm cho điều này phức tạp tất cả bởi lỗi của tôi
Mã đơn giản này làm những gì tôi cần

Mã số

<?php
    $rSetArtists = $rSetArtists[1];

    foreach ($rSetArtists as $key => $value):
        echo $value->_ARTIST_NAME . '
';
    endforeach;

    echo $renderPaginationLinks;
    ?>


Khi bắt đầu, việc giảm mảng đa chiều đó được thực hiện để phần còn lại được coi như bất kỳ tập kết quả mảng nào khác

Dù sao cũng cảm ơn, dòng mã JSON đó có thể hữu ích cho tôi trong tương lai

Làm cách nào để lặp qua một đối tượng trong PHP?

Để lặp qua một mảng các đối tượng trong PHP. .
Tạo một mảng các đối tượng. ví dụ. $trái cây = [ ["tên" => "Táo"], ["tên" => "Cam"] ]
Sử dụng vòng lặp foreach của PHP để lặp qua mảng. ví dụ. foreach($fruits as $key=>$value) { echo $value['name'];

stdClass có phải là một đối tượng PHP không?

StdClass là lớp trống trong PHP được sử dụng để truyền các loại khác thành đối tượng . Nó tương tự như đối tượng Java hoặc Python. stdClass không phải là lớp cơ sở của các đối tượng. Nếu một đối tượng được chuyển đổi thành đối tượng, nó không bị sửa đổi.

Tôi có thể sử dụng foreach trên đối tượng trong PHP không?

PHP cung cấp một cách để định nghĩa các đối tượng sao cho có thể lặp qua danh sách các mục, chẳng hạn với câu lệnh foreach.

Làm cách nào để lặp qua một mảng các mảng trong PHP?

Trả lời. Sử dụng vòng lặp lồng nhau trong PHP .