ผมจะลบค่าบางค่าในตัวแปร array ต้องใช้คำสั่งอะไรหรอครับ

เริ่มโดย catz001, 21 กันยายน 2007, 04:42:21

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

catz001

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

ball6847

เอามาจาก  คู่มือ 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

We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

EThaiZone

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

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

ลองใช้ดูนะครับ  :)

amaudy

^
^
^
ตามนั้นครับ
แถมให้อีกนิด

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

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

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

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

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

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

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

ball6847

อ้างถึงจาก: EThaiZone ใน 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 ไปเลย เอาทั้งเช็คค่าและชนิดข้อมูลให้ตรงกัน   :P

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

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

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

tarnroma

อ้างถึงจาก: catz001 ใน 21 กันยายน 2007, 04:42:21
???
สมมุตินะครับ ผมมีตัวแปร $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

 :-* ขอบคุณทุกท่านที่เข้ามาช่วยกันตอบครับ ได้ประโยชน์จากทุกคำตอบที่ตอบมาเลยครับ ทำให้รู้มากกว่าเดิมเยอะเลยครับ  :)

EThaiZone

อ้างถึงจาก: ball6847 ใน 21 กันยายน 2007, 11:36:28
เวงกำ 555+ ทำมัยคนทำฟังก์ชั่น array_search มันไม่ส่งคืนค่าเป็น boolean อ่ะ เหอๆ
จะเอา integer จะเอา boolean ก็เอาสักอย่าง แถมคืนค่าเวลา int เป็น 0 อีก เหอๆ มันค่าเท่ากันเลยนะน่ะ

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

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

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

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

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

mixture

กำลังหาเรื่องนี้อยู่พอดี ขอบคุณ คุณโจ้มากครับ สำหรับ code ที่แสนสั้นและสะดวก  :wanwan017:
[direct=http://moomak.wordpress.com]จิ[/direct]