PHP Array_Push tidak berfungsi

Saya mencoba mengatur serangkaian hasil yang diperoleh melalui kueri basis data. Berikut adalah kode yang saya gunakan untuk melakukan ini:

$time_slots = $wpdb->get_results($query);
print_r($time_slots); 
echo ("<br/><br/><br/><br/>");
/*organize slots into array*/


$openings = array(); 
foreach($time_slots as $ts)
{
    if(empty($openings))
    {
        echo("Empty Array: ");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        $openings[$ts->route_date] = $ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");

    }
    elseif (array_key_exists($ts->route_date, $openings)) 
    {
        echo("Same Day");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        array_push($openings[$ts->route_date][$ts->name], $ts); 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");
    }
    else
    {
        echo("New Day : ");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        $openings[$ts->route_date] = $ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>"); 
    }
}

/*return results*/
$result['openings'] = $openings; 
$result['time'] = $time_slots;  
$result['begin'] = $begin; 
$result['end'] = $end; 
$result['query'] = $query; 
$result['type'] = "success"; 
$result = json_encode($result);
print_r($openings); 

Inilah hasil tunggal ketika saya print_r $ts:

 stdClass Object ( [route_date] => 2014-01-10 [name] => 2 [openings] => 1 [appointments] => 0 ) 

Berikut tampilan satu lingkarannya. Anda akan melihat bahwa logikanya berfungsi, dan semuanya berjalan sebagaimana mestinya, tetapi penambahan t:

> Empty Array: 

Inserting: stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



Same Day

Inserting: stdClass Object ( [route_date] => 2014-01-10 [name] => 1 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



Same Day

Inserting: stdClass Object ( [route_date] => 2014-01-10 [name] => 2 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



Same Day

Inserting: stdClass Object ( [route_date] => 2014-01-10 [name] => 3 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



Same Day

Inserting: stdClass Object ( [route_date] => 2014-01-10 [name] => 4 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



New Day : 

Inserting: stdClass Object ( [route_date] => 2014-01-11 [name] => 0 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) [2014-01-11] => stdClass Object ( [route_date] => 2014-01-11 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 



Same Day

Inserting: stdClass Object ( [route_date] => 2014-01-11 [name] => 1 [openings] => 1 [appointments] => 0 ) 

contents of Opening: 

Array ( [2014-01-10] => stdClass Object ( [route_date] => 2014-01-10 [name] => 0 [openings] => 1 [appointments] => 0 ) [2014-01-11] => stdClass Object ( [route_date] => 2014-01-11 [name] => 0 [openings] => 1 [appointments] => 0 ) ) 

Ketika semuanya sudah dikatakan dan dilakukan, saya mendapatkan hasil ini:

Anda akan melihat bahwa hanya instance pertama dari objek pertama yang ditambahkan ke array baru $openings.

MEMPERBARUI:

Saya baru menyadari bahwa saya memerlukan array multidimensi untuk ini, tetapi ketika saya mencoba menambahkan dimensi kedua, saya mendapatkan kesalahan berikut:

Apa yang saya lakukan salah di sini? Saya ingin satu array $openings[route_date][number] tetapi saya tidak dapat membuatnya berfungsi. Bantuan apa pun akan sangat membantu.

 Cannot use object of type stdClass as array

Itu karena

$time_slots = $wpdb->get_results($query);
print_r($time_slots); 
echo ("<br/><br/><br/><br/>");
/*organize slots into array*/


$openings = array(); 
foreach($time_slots as $ts)
{
    if(empty($openings))
    {
        echo("Empty Array: ");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        $openings[$ts->route_date] = $ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");

    }
    elseif (array_key_exists($ts->route_date, $openings)) 
    {
        echo("Same Day");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        array_push($openings[$ts->route_date][$ts->name], $ts); 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");
    }
    else
    {
        echo("New Day : ");
        echo ("<br/>");
        echo ("<br/>");
        echo("Inserting: ");
        print_r($ts); 
        echo ("<br/>");
        echo ("<br/>");
        $openings[$ts->route_date] = $ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>"); 
    }
}

/*return results*/
$result['openings'] = $openings; 
$result['time'] = $time_slots;  
$result['begin'] = $begin; 
$result['end'] = $end; 
$result['query'] = $query; 
$result['type'] = "success"; 
$result = json_encode($result);
print_r($openings); 
bekerja dengan array, bukan objek. Anda harus mengonversi print_r Anda menjadi array. Coba gunakan:


person BlackHatSamurai    schedule 11.01.2014    source sumber
comment
Aku tidak tahu kamu bisa melakukan itu! Itu sangat mengagumkan!!!! Terima kasih!!!!   -  person Anshu Dwibhashi    schedule 11.01.2014
comment
sama-sama, hanya tip yang harus Anda waspadai.. :)   -  person BlackHatSamurai    schedule 11.01.2014
comment
Array ( [10-01-2014] => Objek stdClass ( [tanggal_rute] => 10-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [11-01-2014] => Objek stdClass ( [tanggal_rute] => 11-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [12-01-2014] => Objek stdClass ( [tanggal_rute] = > 12-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [13-01-2014] => Objek stdClass ( [tanggal_rute] => 13-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [14-01-2014] => Objek stdClass ( [tanggal_rute] => 14-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [15-01-2014] => Objek stdClass ( [tanggal_rute] => 15-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [2014 -01-16] => Objek stdClass ( [tanggal_rute] => 16-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [17-01-2014] => Objek stdClass ( [tanggal_rute] => 17-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [18-01-2014] => Objek stdClass ( [tanggal_rute] => 01-2014 -18 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [19-01-2014] => Objek stdClass ( [tanggal_rute] => 19-01-2014 [nama] => 0 [ bukaan] => 1 [janji temu] => 0 ) [20-01-2014] => Objek stdClass ( [tanggal_rute] => 20-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] = > 0 ) [21-01-2014] => Objek stdClass ( [tanggal_rute] => 21-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [22-01-2014 ] => Objek stdClass ( [tanggal_rute] => 22-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [23-01-2014] => Objek stdClass ( [tanggal_rute] => 23-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [24-01-2014] => Objek stdClass ( [tanggal_rute] => 24-01-2014 [nama ] => 0 [bukaan] => 1 [janji temu] => 0 ) [25-01-2014] => Objek stdClass ( [tanggal_rute] => 25-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [26-01-2014] => Objek stdClass ( [tanggal_rute] => 26-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [ 27-01-2014] => Objek stdClass ( [tanggal_rute] => 27-01-2014 [nama] => 0 [bukaan] => 1 [janji] => 0 ) [28-01-2014] => stdClass Objek ( [tanggal_rute] => 28-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [29-01-2014] => Objek stdClass ( [tanggal_rute] => 2014- 29-01 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [30-01-2014] => Objek stdClass ( [tanggal_rute] => 30-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [31-01-2014] => Objek stdClass ( [tanggal_rute] => 31-01-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [01-02-2014] => Objek stdClass ( [tanggal_rute] => 01-02-2014 [nama] => 0 [bukaan] => 1 [janji] => 0 ) [02-2014 02] => Objek stdClass ( [tanggal_rute] => 02-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [03-02-2014] => Objek stdClass ( [tanggal_rute ] => 03-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [04-02-2014] => Objek stdClass ( [tanggal_rute] => 04-02-2014 [ nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [05-02-2014] => Objek stdClass ( [tanggal_rute] => 05-02-2014 [nama] => 0 [bukaan] = > 1 [janji temu] => 0 ) [06-02-2014] => Objek stdClass ( [tanggal_rute] => 06-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [07-02-2014] => Objek stdClass ( [tanggal_rute] => 07-02-2014 [nama] => 0 [bukaan] => 1 [janji] => 0 ) [08-02-2014] => Objek stdClass ( [tanggal_rute] => 08-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [09-02-2014] => Objek stdClass ( [tanggal_rute] => 2014 -02-09 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [10-02-2014] => Objek stdClass ( [tanggal_rute] => 10-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [11-02-2014] => Objek stdClass ( [tanggal_rute] => 11-02-2014 [nama] => 0 [bukaan] => 1 [janji temu ] => 0 ) [12-02-2014] => Objek stdClass ( [tanggal_rute] => 12-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [02-2014 -13] => Objek stdClass ( [tanggal_rute] => 13-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [14-02-2014] => Objek stdClass ( [ tanggal_rute] => 14-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [15-02-2014] => Objek stdClass ( [tanggal_rute] => 15-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [16-02-2014] => Objek stdClass ( [tanggal_rute] => 16-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [17-02-2014] => Objek stdClass ( [tanggal_rute] => 17-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [18-02-2014] => Objek stdClass ( [tanggal_rute] => 18-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [19-02-2014] = > Objek stdClass ( [tanggal_rute] => 19-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [20-02-2014] => Objek stdClass ( [tanggal_rute] => 20-02-2014 [nama] => 0 [bukaan] => 1 [janji temu] => 0 ) [21-02-2014] => Objek stdClass ( [tanggal_rute] => 21-02-2014 [nama] = > 0 [bukaan] => 1 [janji temu] => 0 ) [22-02-2014] => Objek stdClass ( [tanggal_rute] => 22-02-2014 [nama] => 0 [bukaan] => 1 [ janji temu] => 0 ) [23-02-2014] => Objek stdClass ( [tanggal_rute] => 23-02-2014 [nama] => 0 [bukaan] => 1   -  person Anshu Dwibhashi    schedule 11.01.2014


Jawaban (3)


Di array_push() Anda, argumen pertama sepertinya bukan array. array_push() akan memunculkan peringatan jika argumen pertama bukan array.

$ts = (array) $ts;
person Alex Pliutau    schedule 11.01.2014

Saya telah membuat contoh yang berfungsi dengan baik.

This should be array_push($openings, $ts);

Ternyata saya perlu melakukan beberapa hal. Ini kode yang saya butuhkan:

//I'm using mysql and I will switch to  MySQLi or PDO_MySQL later) 

$query = "SELECT * FROM events";
$result = mysql_query($query);
$openings = array();
while ($row = mysql_fetch_object($result)) {
    array_push($openings, $row); 
}
print_r($openings);

//output

Array
(
    [0] => stdClass Object
        (
            [idevent] => 1
            [event] => Event1
            [event_date] => 2014-01-06
        )

    [1] => stdClass Object
        (
            [idevent] => 2
            [event] => Event2
            [event_date] => 2014-01-07
        )

)
person RaviRokkam    schedule 11.01.2014

Ngomong-ngomong, silakan cetak array tersebut dengan cantik, dengan menambahkan

    $time_slots = $wpdb->get_results($query);
echo("<pre>"); 
//print_r($time_slots); 

echo ("<br/><br/><br/><br/>");
/*organize slots into array*/


$openings = array(); 
foreach($time_slots as $ts)
{
    if(empty($openings))
    {
        echo("Empty Array: ");
        echo ("<br/>");

        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        echo ("<pre>");
        $openings[$ts->route_date][$ts->name] = $ts; <--- Needed to add the [$ts->name]
        echo("</pre>");
        echo("contents of Opening: ");
        echo ("<pre>");
        print_r($openings); 
        echo ("</pre>");

    }
    elseif (array_key_exists($ts->route_date, $openings)) 
    {
        echo("Same Day");
        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        $openings[$ts->route_date][$ts->name]=$ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");
    }
    else
    {
        echo("New Day : ");
        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        echo ("<pre>");
        $openings[$ts->route_date][$ts->name] = $ts; 
        echo("</pre>");
        echo("contents of Opening: ");
        echo ("<pre>");
        print_r($openings); 
        echo ("</pre>");
    }
sebelum output dan _2_ setelahnya..

    $time_slots = $wpdb->get_results($query);
echo("<pre>"); 
//print_r($time_slots); 

echo ("<br/><br/><br/><br/>");
/*organize slots into array*/


$openings = array(); 
foreach($time_slots as $ts)
{
    if(empty($openings))
    {
        echo("Empty Array: ");
        echo ("<br/>");

        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        echo ("<pre>");
        $openings[$ts->route_date][$ts->name] = $ts; <--- Needed to add the [$ts->name]
        echo("</pre>");
        echo("contents of Opening: ");
        echo ("<pre>");
        print_r($openings); 
        echo ("</pre>");

    }
    elseif (array_key_exists($ts->route_date, $openings)) 
    {
        echo("Same Day");
        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        $openings[$ts->route_date][$ts->name]=$ts; 
        echo("contents of Opening: ");
        echo ("<br/>");
        echo ("<br/>");
        print_r($openings); 
        echo ("<br/><br/><br/><br/>");
    }
    else
    {
        echo("New Day : ");
        echo("Inserting: ");
        echo ("<pre>");
        print_r($ts); 
        echo("</pre>");
        echo ("<pre>");
        $openings[$ts->route_date][$ts->name] = $ts; 
        echo("</pre>");
        echo("contents of Opening: ");
        echo ("<pre>");
        print_r($openings); 
        echo ("</pre>");
    }
person BlackHatSamurai    schedule 11.01.2014