ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[PHP] รวม object ทำยังไงครับ?
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [PHP] รวม object ทำยังไงครับ?  (อ่าน 1438 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« เมื่อ: 12 สิงหาคม 2009, 15:17:42 »

ผมสร้าง object มาสองตัว จาก class เดียวกัน
$response กับ $attribute

ทีนี้อยากให้ object สองตัวนี้มันรวมกันหน่ะครับ ต้องใช้ function อะไรครับ?


อ้อ.. แล้วก็ ผมลองใช้ array_merge แล้ว แต่ object มันก็ยังไม่รวมกันอยู่ดี ผมลองทดสอบโดยใช้ code แบบนี้
โค๊ด:
<?php
foreach(array_merge($response,$attribute) as $value){
  
$name $value->book->name // เป็นค่าที่ได้จาก object $response
  
$img $value->smallimg->img // เป็นค่าที่ได้จาก object $attribute
  
print($name.$img);
}
?>


แต่ผลที่ได้ มันกลายเป็นว่า มันวนลูป 2 รอบ ซึ่งจริงๆแล้วมันน่าจะวนแค่รอบเดียว
บันทึกการเข้า

g-ji
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 231
ออฟไลน์ ออฟไลน์

กระทู้: 3,254



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 12 สิงหาคม 2009, 15:28:46 »

เอา print ออกมานอก loop สิ

โค๊ด:
<?php
foreach(array_merge($response,$attribute) as $value){
  
$name $value->book->name // เป็นค่าที่ได้จาก object $response
  
$img $value->smallimg->img // เป็นค่าที่ได้จาก object $attribute

}
  print(
$name.$img);
?>

บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 12 สิงหาคม 2009, 15:38:21 »

เอา print ออกมานอก loop สิ

โค๊ด:
<?php
foreach(array_merge($response,$attribute) as $value){
  
$name $value->book->name // เป็นค่าที่ได้จาก object $response
  
$img $value->smallimg->img // เป็นค่าที่ได้จาก object $attribute

}
  print(
$name.$img);
?>


โทษครับ จริงๆแล้วมันมีปัญหาตอนแสดงผลหน่ะครับ

คือสมมุติถ้าสั่ง print
โค๊ด:
<?php
print("<div>".$name.$img."</div>"); // สั่งใน foreach

// ผลที่ได้มันกลับออกมาเป็น 
//<div>$name</div>
//<div>$img</div>
?>


เหมือนมันวนลูปแยก object กัน แทนที่จะมี div แค่อันเดียว
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 15:49:57 โดย charlie » บันทึกการเข้า

morizaki
ก๊วนเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 499



ดูรายละเอียด
« ตอบ #3 เมื่อ: 12 สิงหาคม 2009, 16:09:10 »

$response,$attribute เป็น array ทั้งคู่อะป่าวครับ
แต่คิดว่าไม่น่าใช่ เพราะเห็นมีการอ่านค่าจาก attribute ซะด้วยสิ

ตาม coding ที่เขียนมามันจะทำงานแบบนี้อ่ะครับ
1. เอา $response กับ $attribute มาต่อกันเป็น array จากคำสั่ง array_merge จะได้ผลลัพธ์แบบนี้อ่ะครับ
  Array
    (
       
  • => $response
  • [1] => $attribute
        )
    2. พอมันวนใน loop foreach
    รอบที่ 1 ค่า $value จะเป็น $response มันก็จะมีค่า $name อย่างเดียว (ให้เดา ->book->name มาจาก $response แหงมๆ)
    รอบที่ 2 ค่า $value จะเป็น $attribute มันก็จะมีค่า $img อย่างเดียว (ให้เดา ->smallimg->img ก็คงมาจาก $attribute)


    ปล. ยังสงสัยจุดประสงค์ของการรวม ตัวแปร $response กับ $attribute Huh?
    ถ้ายังไงอธิบายสิ่งที่อยากได้ให้ละเอียดหน่อยน่ะครับ
บันทึกการเข้า
charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 12 สิงหาคม 2009, 16:25:36 »

$response,$attribute เป็น array ทั้งคู่อะป่าวครับ
แต่คิดว่าไม่น่าใช่ เพราะเห็นมีการอ่านค่าจาก attribute ซะด้วยสิ

ตาม coding ที่เขียนมามันจะทำงานแบบนี้อ่ะครับ
1. เอา $response กับ $attribute มาต่อกันเป็น array จากคำสั่ง array_merge จะได้ผลลัพธ์แบบนี้อ่ะครับ
  Array
    (
        
  • => $response
  • [1] => $attribute
        )
    2. พอมันวนใน loop foreach
    รอบที่ 1 ค่า $value จะเป็น $response มันก็จะมีค่า $name อย่างเดียว (ให้เดา ->book->name มาจาก $response แหงมๆ)
    รอบที่ 2 ค่า $value จะเป็น $attribute มันก็จะมีค่า $img อย่างเดียว (ให้เดา ->smallimg->img ก็คงมาจาก $attribute)


    ปล. ยังสงสัยจุดประสงค์ของการรวม ตัวแปร $response กับ $attribute Huh?
    ถ้ายังไงอธิบายสิ่งที่อยากได้ให้ละเอียดหน่อยน่ะครับ
จุดประสงค์ของผมก็คือ อยากทำให้มันแสดงผลตามที่ต้องการหน่ะครับ แ่ต่มันกลับแสดงเกิน ผมเลยเดาว่ามันน่าจะมาจากการที่เป็น object คนละตัวกันเวลาวนลูป มันเลยแยกจากกัน ไม่รวมกัน

code จริงๆเป็นแบบนี้ครับ(โทษครับ ที่ไม่เอา่ลงตั้งแตกตอนแรก กลัวคนเข้ามาดูจะงง)
โค๊ด:
<?php
print("<table>");
foreach(
array_merge($attributes,$responses) as $current){
$smallimage $current->SmallImage->URL;
$Title $current->ItemAttributes->Title;
$Price $current->Price->FormattedPrice;
$CartItemId $current->CartItemId;
$remove "shoppingcart.php?Action=Remove&CartId=$CartId&HMAC=$HMAC&CartItemId=$CartItemId";
print("<tr><td><img src =$smallimage></td><td>".$Title."</td>");
print("<td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>");
}

print(
"</table>");
?>


ผลที่ได้กลายเป็นแบบนี้
โค๊ด:
<table>
  <tr><td><img src =$smallimage></td><td>".$Title."</td>
  <tr><td><img src =$smallimage></td><td>".$Title."</td>
  <td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>
  <td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>
</table

ซึ่งจริงๆแล้วมันควรจะเป็นแบบนี้
โค๊ด:
<table>
  <tr><td><img src =$smallimage></td><td>".$Title."</td><td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>
  <tr><td><img src =$smallimage></td><td>".$Title."</td><td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>
</table>


« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 16:45:40 โดย charlie » บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 12 สิงหาคม 2009, 17:08:41 »

I think this should work.  Tongue

โค๊ด:
<?php

class Compositor {
private $obj_a;
private $obj_b

public function 
__construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}

$merged = new Compositor($attributes,$responses);

print(
"<table>");
foreach(
$merged as $current){
$smallimage $current->SmallImage->URL;
$Title $current->ItemAttributes->Title;
$Price $current->Price->FormattedPrice;
$CartItemId $current->CartItemId;
$remove "shoppingcart.php?Action=Remove&CartId=$CartId&HMAC=$HMAC&CartItemId=$CartItemId";
print("<tr><td><img src =$smallimage></td><td>".$Title."</td>");
print("<td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>");
}

print(
"</table>");


?>

REF:
โค๊ด:
http://stackoverflow.com/questions/455700/what-is-the-best-method-to-merge-two-php-objects

PS. Work on PHP5 not PHP4. (This is Magic Methods.)
บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 12 สิงหาคม 2009, 17:28:28 »

I think this should work.  Tongue

โค๊ด:
<?php

class Compositor {
private $obj_a;
private $obj_b

public function 
__construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}

$merged = new Compositor($attributes,$responses);

print(
"<table>");
foreach(
$merged as $current){
$smallimage $current->SmallImage->URL;
$Title $current->ItemAttributes->Title;
$Price $current->Price->FormattedPrice;
$CartItemId $current->CartItemId;
$remove "shoppingcart.php?Action=Remove&CartId=$CartId&HMAC=$HMAC&CartItemId=$CartItemId";
print("<tr><td><img src =$smallimage></td><td>".$Title."</td>");
print("<td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>");
}

print(
"</table>");


?>

REF:
โค๊ด:
http://stackoverflow.com/questions/455700/what-is-the-best-method-to-merge-two-php-objects

PS. Work on PHP5 not PHP4. (This is Magic Methods.)


ไม่ได้อ่า..ครับ ทีนี้ไม่ขึ้นอะไรเรย  Tongue

ผมลอง
print("<pre>");
print_r($merged);

object มันรวมกันแล้วครับ แต่เรียกไม่ขึ้น
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 18:10:23 โดย charlie » บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 12 สิงหาคม 2009, 18:18:32 »

ผมก็อบคลาสมา ลืมดูว่า
โค๊ด:
	private $obj_b

ในคลาสไม่มีเซมิโคล่อนปิด ให้ใส่ด้วยครับ

ผมเทสแล้วใช้งานได้นะ

โค้ดที่เทส

โค๊ด:
<?php

class Compositor {
private $obj_a;
private $obj_b;

public function __construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}

class 
rand_simple_obj {
public function __construct() {
for($i=0$i<3$i++) {
$s_key crc32(rand());
for($i2=0$i2<3$i2++) {
$key crc32(rand());
$value crc32(rand());
$this->$s_key->$key $value;
}
}
}
}

$obj1 = new rand_simple_obj;
$obj2 = new rand_simple_obj;
$merged = new Compositor($obj1$obj2);

var_dump($merged);
?>
บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 12 สิงหาคม 2009, 18:39:31 »

ผมก็อบคลาสมา ลืมดูว่า
โค๊ด:
	private $obj_b

ในคลาสไม่มีเซมิโคล่อนปิด ให้ใส่ด้วยครับ

ผมเทสแล้วใช้งานได้นะ

โค้ดที่เทส

โค๊ด:
<?php

class Compositor {
private $obj_a;
private $obj_b;

public function __construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}

class 
rand_simple_obj {
public function __construct() {
for($i=0$i<3$i++) {
$s_key crc32(rand());
for($i2=0$i2<3$i2++) {
$key crc32(rand());
$value crc32(rand());
$this->$s_key->$key $value;
}
}
}
}

$obj1 = new rand_simple_obj;
$obj2 = new rand_simple_obj;
$merged = new Compositor($obj1$obj2);

var_dump($merged);
?>


ผมว่าวิธีเรียกผมคงผิดแน่ๆเลย

อันนี้ค่าที่ได้จากตอนสั่ง

print("<pre>");
print_r($merged);

http://www.mediafire.com/file/fmhjzijrnwn/compositor.txt

พี่ลองดูให้หน่อยครับ ว่ามันต้องเรียกยังไง เหมือนผมจะเรียกผิดรึเปล่า เช่นจะเรียก ไอ SmallImage->URL
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 18:41:36 โดย charlie » บันทึกการเข้า

morizaki
ก๊วนเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 499



ดูรายละเอียด
« ตอบ #9 เมื่อ: 12 สิงหาคม 2009, 19:28:35 »

 :oโอ้มีท่านเทพมาช่วยตอบแล้ว
โค๊ดที่คุณ  EThaiZone  เขียนเป็นการรวม $obj_a,$obj_b ไว้ใต้ class เดียวกันครับ

เวลาเรียกก็ต้องเรียก
$merge->obj_a[0]->SmallImage->URL

 Smiley
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 12 สิงหาคม 2009, 19:32:26 »

ของ amazon นี้เอง ถึงว่าคุ้นๆ กับลักษณะการเรียก obj

ปกติบางที เวลาเรา parser มา เราก็ไม่ได้ obj ที่ถูกต้องเสมอไป
อย่างจากไฟล์เมื่อกี๊ มันใช้ array อิง แล้วข้างในถึงเป็น obj

ดังนั้นก็ต้องมาเขียนฟังค์ชั่นรวมกันใหม่ครับ คิดว่าแบบนี้น่าจะใช้ได้นะ

โค๊ด:
<?php

class Compositor {
private $obj_a;
private $obj_b;

public function __construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}

//เขียนใหม่มาเพื่อ port จาก Compositor รองรับกรณี index แบบ array
function array_obj_merge($obj1$obj2) {
$new = array();
foreach($obj1 as $k => $v) {
$new[$k] = new Compositor($obj1[$k], $obj2[$k]);
}
return $new;
}

//ข้อมูลตัวอย่าง จากไฟล์ที่ส่งมา (เฉพราะส่วนที่โดนเรียกในลูป)
$obj1[0]->SmallImage->URL 'http://ecx.images-amazon.com/images/I/51YEMUJ0RXL._SL75_.jpg';
$obj1[0]->ItemAttributes->Title "Raving Fans: A Revolutionary Approach To Customer Service";
$obj2[0]->Price->FormattedPrice '$15.61';
$obj2[0]->CartItemId 'U2ZXRW09XXADCF';

$obj1[1]->SmallImage->URL "http://ecx.images-amazon.com/images/I/51JrYsxy6UL._SL75_.jpg";
$obj1[1]->ItemAttributes->Title "Snow Flower and the Secret Fan: A Novel";
$obj2[1]->Price->FormattedPrice '$11.56';
$obj2[1]->CartItemId 'U1MXDHAQYJAQE8';

//จับรวมซะ
$merged array_obj_merge($obj1$obj2);

print(
"<table>");
foreach(
$merged as $current){
$smallimage $current->SmallImage->URL;
$Title $current->ItemAttributes->Title;
$Price $current->Price->FormattedPrice;
$CartItemId $current->CartItemId;
$remove "shoppingcart.php?Action=Remove&CartId=$CartId&HMAC=$HMAC&CartItemId=$CartItemId";
print("<tr><td><img src =$smallimage></td><td>".$Title."</td>");
print("<td></td><td><a href =$remove>remove</a></td><td>".$Price."</td></tr>");
}

print(
"</table>");

?>
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 12 สิงหาคม 2009, 19:36:52 »

:oโอ้มีท่านเทพมาช่วยตอบแล้ว
โค๊ดที่คุณ  EThaiZone  เขียนเป็นการรวม $obj_a,$obj_b ไว้ใต้ class เดียวกันครับ

เวลาเรียกก็ต้องเรียก
$merge->obj_a[0]->SmallImage->URL

 Smiley

ไม่ครับ
$merge->obj_a[0]->SmallImage->URL

ไม่ควรเรียกแบบนี้ ไม่งั้นที่ทำมาก็ไร้ความหมาย
จริงๆ มันก็เรียกไม่ได้ เพราะ $obj_a จะเป็น private (ใน php5 น่ะนะ)
กำ มองผิด มันประกาศ private กับตัวแปร ไม่ใช่ตัว obj  Tongue

จุดสำคัญของ class Compositor
อยู่ที่    public function __get($attrib_name)
ที่จะทำการ switch ข้อมูลที่จะเรียกว่าจะเป็น $obj_a หรือ $obj_b
มีอันไหน ก็จะเรียกอันนั้นมาใช้ได้

class Compositor ใช้รวมได้ปกติจริงๆ
เพียงแต่ obj ที่มารวม มันต้องเป็น object จริงๆ
ไม่ใช่ object ปน array แบบที่ parser มาจาก amazon

พวก rss parser ชอบคืนค่ามาแบบนั้น เล่นเอาซะไม่รู้จะเรียกกว่า array หรือ object ดี

 Tongue
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 19:39:51 โดย EThaiZone » บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 12 สิงหาคม 2009, 19:37:18 »

:oโอ้มีท่านเทพมาช่วยตอบแล้ว
โค๊ดที่คุณ  EThaiZone  เขียนเป็นการรวม $obj_a,$obj_b ไว้ใต้ class เดียวกันครับ

เวลาเรียกก็ต้องเรียก
$merge->obj_a[0]->SmallImage->URL

 Smiley

ตอนเรียกธรรมดา เรียกได้แล้วค้าบบบ Smiley

แต่ว่าพอใส่ foreach ยังไม่ขึ้นเหมือนเดิม Cry
บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 12 สิงหาคม 2009, 19:38:57 »

:oโอ้มีท่านเทพมาช่วยตอบแล้ว
โค๊ดที่คุณ  EThaiZone  เขียนเป็นการรวม $obj_a,$obj_b ไว้ใต้ class เดียวกันครับ

เวลาเรียกก็ต้องเรียก
$merge->obj_a[0]->SmallImage->URL

 Smiley

ไม่ครับ
$merge->obj_a[0]->SmallImage->URL

ไม่ควรเรียกแบบนี้ ไม่งั้นที่ทำมาก็ไร้ความหมาย
จริงๆ มันก็เรียกไม่ได้ เพราะ $obj_a จะเป็น private (ใน php5 น่ะนะ)

จุดสำคัญของ class Compositor
อยู่ที่    public function __get($attrib_name)
ที่จะทำการ switch ข้อมูลที่จะเรียกว่าจะเป็น $obj_a หรือ $obj_b
มีอันไหน ก็จะเรียกอันนั้นมาใช้ได้

class Compositor ใช้รวมได้ปกติจริงๆ
เพียงแต่ obj ที่มารวม มันต้องเป็น object จริงๆ
ไม่ใช่ object ปน array แบบที่ parser มาจาก amazon

พวก rss parser ชอบคืนค่ามาแบบนั้น เล่นเอาซะไม่รู้จะเรียกกว่า array หรือ object ดี

 Tongue

แล้วท่านว่าควรจะทำอย่างไรดีขอรับ
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #14 เมื่อ: 12 สิงหาคม 2009, 19:40:54 »

แล้ว array_obj_merge นี้ใช้ได้ไหมครับ หรือเทสแล้วยังไม่ได้ ?
บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 12 สิงหาคม 2009, 19:44:11 »

แล้ว array_obj_merge นี้ใช้ได้ไหมครับ หรือเทสแล้วยังไม่ได้ ?

โอ้ๆ โทษทีครับ เด๋วลองก่อน
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 19:47:54 โดย charlie » บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 12 สิงหาคม 2009, 20:08:38 »

แล้ว array_obj_merge นี้ใช้ได้ไหมครับ หรือเทสแล้วยังไม่ได้ ?


อ้างถึง
//ข้อมูลตัวอย่าง จากไฟล์ที่ส่งมา (เฉพราะส่วนที่โดนเรียกในลูป)
$obj1[0]->SmallImage->URL = 'http://ecx.images-amazon.com/i...I/51YEMUJ0RXL._SL75_.jpg';
$obj1[0]->ItemAttributes->Title = "Raving Fans: A Revolutionary Approach To Customer Service";
$obj2[0]->Price->FormattedPrice = '$15.61';
$obj2[0]->CartItemId = 'U2ZXRW09XXADCF';

$obj1[1]->SmallImage->URL = "http://ecx.images-amazon.com/images/I/51JrYsxy6UL._SL75_.jpg ";
$obj1[1]->ItemAttributes->Title = "Snow Flower and the Secret Fan: A Novel";
$obj2[1]->Price->FormattedPrice = '$11.56';
$obj2[1]->CartItemId = 'U1MXDHAQYJAQE8';


ตรงส่วนนี้ มันไม่ได้กำหนดตายตัวหน่ะครับ จริงๆแล้วผมทำระบบ cart ครับ ไอเจ้า $response กับ $attribute ก็ได้มาจากที่ลูกค้าคลิกสินค้าตัวไหนแล้วถึงจะเรียกค่า ของ iTem หน่ะครับ แต่จากที่พี่ EThaiZone กำหนดมา มันเป็นตายตัวอยู่แล้วอ่ะครับ Tongue
บันทึกการเข้า

charlie
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด เว็บไซต์
« ตอบ #17 เมื่อ: 12 สิงหาคม 2009, 20:18:03 »

โอ้้ๆๆๆๆๆๆ ไม่ต้องแล้วค้าบบบบบบบบบบ ได้แล้วววววววววว

โค๊ด:
<?php
class Compositor {
var $obj_a;
var $obj_b;

public function __construct($obj_a$obj_b) {
$this->obj_a $obj_a;
$this->obj_b $obj_b;
}

public function __get($attrib_name) {
if ($this->obj_a->$attrib_name) {
return $this->obj_a->$attrib_name;
} else {
return $this->obj_b->$attrib_name;
}
}
}


function 
array_obj_merge($obj1$obj2) {
$new = array();
foreach($obj1 as $k => $v) {
$new[$k] = new Compositor($obj1[$k], $obj2[$k]);
}
return $new;
}



$attributes $attribute->Items->Item;
$responses $response->Cart->CartItems->CartItem;
$merged = new Compositor($attributes,$responses);
$array array_obj_merge($merged->obj_a$merged->obj_b);
foreach(
$array as $current){
$smallimage $current->SmallImage->URL;
$Title $current->ItemAttributes->Title;
$Price $current->Price->FormattedPrice;
$CartItemId $current->CartItemId;
$remove "shoppingcart.php?Action=Remove&CartId=$CartId&HMAC=$HMAC&CartItemId=$CartItemId";
print("<tr bgcolor = '#595858'><td width = '10%'><img src =$smallimage></td><td width = '35%'>".$Title."</td>");
print("<td width = '20%'></td><td width = '25%'><a href =$remove>remove</a></td><td width = '10%'>".$Price."</td></tr>");
}

?>


ขอบคุณมากๆครับ คุณ EThaiZone ผมไม่รู้จะขอบคุณยังไง เพราะผมงมมา 3-4 วันแระ

ผมอยากกด +thank ให้อ่ะครับ เค้าต้องทำไงอ่ะ
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2009, 20:19:39 โดย charlie » บันทึกการเข้า

morizaki
ก๊วนเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 499



ดูรายละเอียด
« ตอบ #18 เมื่อ: 12 สิงหาคม 2009, 20:47:21 »

ดีใจด้วยครับทำได้แล้ว Grin Grin
ไว้ว่างๆ ผมติด coding จะให้คุณ EThaiZone เทพทาง coding SEO จริงๆ Tongue

ปกติผมเขียนแต่งานทั่วไป เพิ่งเริ่มทำกะพวก SEO ไว้สงสัยจะมาถามบ้างครับ Smiley

ร่วมกันแบ่งปัน เพื่อให้สังคมดีขึ้น  Smiley Smiley
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 12 สิงหาคม 2009, 21:11:52 »

ได้ก็ดีแล้วครับ จริงเวลาถามคำถามแนวนี้
หลายคนชอบมาแบบว่า อยากได้อย่างนี้อย่างนั้น
บางคนดีหน่อย มีแนบโค้ดตัวอย่างพอให้เข้าใจแนวคิด
แต่สิ่งเดียวที่อยากได้จริงๆ คือ input เพราะไม่มีให้เทส

จริงๆ ตอนแรกว่าถ้าไม่ได้ จะให้ serialize ตัวแปรที่ว่ามาให้  Tongue
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์