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

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

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

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

กระทู้: 607



ดูรายละเอียด
« เมื่อ: 21 กันยายน 2007, 04:42:21 »

 Huh?
สมมุตินะครับ ผมมีตัวแปร $color=array("green","red","orange")
แล้วผมต้องการลบ ค่า red ออกจาก $color ผมจะต้องใช้คำสั่งอะไรหรือครับ(php)
บันทึกการเข้า
ball6847
เจ้าพ่อบอร์ดเสียว
*

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

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #1 เมื่อ: 21 กันยายน 2007, 10:16:45 »

เอามาจาก  คู่มือ php.net คับ

อันนี้อันที่คู่มือเค้าสอน ใช้คล้ายๆ substr() แต่ผมไม่แน่ใจนะว่ามีฟังก์ชั่นสำหรับ ลบ value
ออกจาก array โดยตรงรึปล่าว
โค๊ด:

<?php
$input 
= array("red""green""blue""yellow");
array_splice($input2);
// $input is now array("red", "green")

$input = array("red""green""blue""yellow");
array_splice($input1, -1);
// $input is now array("red", "yellow")

$input = array("red""green""blue""yellow");
array_splice($input1count($input), "orange");
// $input is now array("red", "orange")

$input = array("red""green""blue""yellow");
array_splice($input, -11, array("black""maroon"));
// $input is now array("red", "green",
//          "blue", "black", "maroon")

$input = array("red""green""blue""yellow");
array_splice($input30"purple");
// $input is now array("red", "green",
//          "blue", "purple", "yellow");
?>



อันนี้ฟังก์ชั่นจาก user comment เห็นว่าน่าจะง่ายขั้น

โค๊ด:

function my_array_unset($array,$index) {
 // unset $array[$index], shifting others values
 $res=array();
 $i=0;
 foreach ($array as $item) {
   if ($i!=$index)
     $res[]=$item;
   $i++;
 }
 return $res;
}


แต่ถ้าให้ง่ายๆ นะคับ

โค๊ด:

unset($color[1]); // remove the second key out of array

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

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

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

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 21 กันยายน 2007, 10:34:19 »

ผมขอตอนกรณีถ้าอยากจะค้นเอาค่า red จากอาเรย์โดยเราไม่รู้ตำแหน่ง เช่นกรณีอาเรย์โดน shuffle

$key = array_search('red', $color);
if($key !== FALSE) unset($color[$key]);

ลองใช้ดูนะครับ  Smiley
บันทึกการเข้า

amaudy
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,212



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 21 กันยายน 2007, 10:35:38 »

^
^
^
ตามนั้นครับ
แถมให้อีกนิด
โค๊ด:
<?php
// Array เป้าหมาย
$color = array("red""green""blue""yellow");
// ทดลองพิมพ์ค่าออกมาดู
print_r($color);

// ตั้งค่าตัวที่ต้องการลบ
$targetDelete 'red';
echo 
"\nTarget array to delete : $targetDelete";

// หาตำแหน่งตัวที่ต้องการลบ ด้วยฟังก์ชัน array_serach()
$positionDelete array_search($targetDelete,$color);
echo 
"\nPosition of array to delete : $positionDelete\n";

//ลบออกจากอาเรย์ ด้วยคำสั่ง array_splice
array_splice($color$positionDelete,1);
// ทดลองพิมพ์ค่าออกมาดู ว่าโดนลบหรือเปล่า
print_r($color);
?>

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

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

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

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 21 กันยายน 2007, 10:44:31 »

เวลาใช้ array_search จำเป็นต้องเช็คค่าที่ออกมาใส่สภาพว่าใช่หรือเปล่า

สมมุติว่า
$color = array("red", "green", "blue", "yellow");

แล้วถ้าเราค้นค่า red
array_search จะคืนค่าเป็น 0 ชนิด integer
แต่ถ้าเราค้นไม่เจอ มันจะคืนเป็น FALSE ชนิด boolean

ปัญหาจะตามมาเวลาค่าหาไม่เจอเนี่ยแหละ

เมื่อก่อนผมเคยเขียนเช็คแค่ ค่าคืนมา != 0 (ใน boolean ก็เท่ากัย false)
แต่สุดท้ายมันไม่ตัดค่าแรก จนอ่านใน php.net เจอคนอธิบายกันเยอะ (สงสัยโดนเหมือนกัน 55+)

เลยต้องเช็ค !== FALSE ไปเลย เอาทั้งเช็คค่าและชนิดข้อมูลให้ตรงกัน   Tongue
บันทึกการเข้า

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

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

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #5 เมื่อ: 21 กันยายน 2007, 11:36:28 »

เวลาใช้ array_search จำเป็นต้องเช็คค่าที่ออกมาใส่สภาพว่าใช่หรือเปล่า

สมมุติว่า
$color = array("red", "green", "blue", "yellow");

แล้วถ้าเราค้นค่า red
array_search จะคืนค่าเป็น 0 ชนิด integer
แต่ถ้าเราค้นไม่เจอ มันจะคืนเป็น FALSE ชนิด boolean

ปัญหาจะตามมาเวลาค่าหาไม่เจอเนี่ยแหละ

เมื่อก่อนผมเคยเขียนเช็คแค่ ค่าคืนมา != 0 (ใน boolean ก็เท่ากัย false)
แต่สุดท้ายมันไม่ตัดค่าแรก จนอ่านใน php.net เจอคนอธิบายกันเยอะ (สงสัยโดนเหมือนกัน 55+)

เลยต้องเช็ค !== FALSE ไปเลย เอาทั้งเช็คค่าและชนิดข้อมูลให้ตรงกัน   Tongue

เวงกำ 555+ ทำมัยคนทำฟังก์ชั่น array_search มันไม่ส่งคืนค่าเป็น boolean อ่ะ เหอๆ
จะเอา integer จะเอา boolean ก็เอาสักอย่าง แถมคืนค่าเวลา int เป็น 0 อีก เหอๆ มันค่าเท่ากันเลยนะน่ะ

แค่โค้ดคุณ Ethaizone สั้นดีคับ เจ๋งเลย
บันทึกการเข้า

tarnroma
ก๊วนเสียว
*

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

กระทู้: 366



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 21 กันยายน 2007, 12:15:27 »

Huh?
สมมุตินะครับ ผมมีตัวแปร $color=array("green","red","orange")
แล้วผมต้องการลบ ค่า red ออกจาก $color ผมจะต้องใช้คำสั่งอะไรหรือครับ(php)

จริงๆ จขกท. ต้องการแค่ลบค่าที่ต้องการออกจาก Main Array  ซึ่งจริงๆมันก็คือการลบออก ก็ใช้คำสั่ง array_diff ไปเลยคับ สั้นๆ จะลบกี่ตัวก็ทำได้คับ

โค๊ด:
$color=array("green","red","orange");//Main Array
$difcolor=array("red");//อยากจะลบอะไรเพิ่มอีกก้อเพียงเพิ่ม Member ลงไป

$color = array_diff($color, $difcolor); //คำสั่งหลักๆก็คือ array_diff นี่แหละคับ

print_r($color);//แสดง member ใน array ที่ Diff แล้ว

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

YES
catz001
สมุนแก๊งเสียว
*

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

กระทู้: 607



ดูรายละเอียด
« ตอบ #7 เมื่อ: 21 กันยายน 2007, 12:53:01 »

 Kiss ขอบคุณทุกท่านที่เข้ามาช่วยกันตอบครับ ได้ประโยชน์จากทุกคำตอบที่ตอบมาเลยครับ ทำให้รู้มากกว่าเดิมเยอะเลยครับ  Smiley
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

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

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 21 กันยายน 2007, 15:13:23 »

เวงกำ 555+ ทำมัยคนทำฟังก์ชั่น array_search มันไม่ส่งคืนค่าเป็น boolean อ่ะ เหอๆ
จะเอา integer จะเอา boolean ก็เอาสักอย่าง แถมคืนค่าเวลา int เป็น 0 อีก เหอๆ มันค่าเท่ากันเลยนะน่ะ

แค่โค้ดคุณ Ethaizone สั้นดีคับ เจ๋งเลย

ผมก็ไม่รู้ ตอนแรกผมใช้แบบไม่เช็ค เพราะคิดว่า มันจะ false แล้วคงไม่ตัดอะไร (ตอนนั้นคิดแบบนั้นเลยไม่ใส่ if)
เหมือนกะใช้ unset ไม่มีผล  ที่ไหนได้ php เข้าใจว่า false (boolean) เป็น 0 (integer)
เลยค่าตัวแรกหายทุกทีไป -*-

ในส่วน comment หน้านั้นเลยมี หลายคนบอกกันถี่เลย หุๆ

array_diff น่าใช้ดีครับ น่าจะสบายกว่าด้วย

ปล. ถ้ามีกระทู้ php ในมุมมืด จะมีคนสนปะ ^^'
บันทึกการเข้า

mixture
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,844



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 27 ตุลาคม 2009, 04:37:38 »

กำลังหาเรื่องนี้อยู่พอดี ขอบคุณ คุณโจ้มากครับ สำหรับ code ที่แสนสั้นและสะดวก  wanwan017
บันทึกการเข้า

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