|
|
|
ตัดค่าที่สลับตำแหน่งแล้วเหมือนกันออกจาก Array ทำยังงไงดีครับ |
|
|
|
|
|
|
|
จากโค้ดนี้ครับ เป็นการตัดค่าที่ซ้ำกันออกจาก Array
Code (PHP)
<?php
$arr_num = array(8,2,8,9,8,2,8); //ตัวอย่างค่าที่รับมา
$count_arr = count($arr_num);
for ($i = 0; $i <= $count_arr-2; $i++ ){
$arr_new[$i] = $arr_num[$i].$arr_num[$i+1]; //จับคู่ หลัก1หลัก2,หลัก2หลัก3,...,หลักnหลักn+1
}
// จะได้ 82,28,89,98,82,28
// ตัดค่าซ้ำ
$r=0;
$arr = array();
$b= array_unique ($arr_new);
foreach($b as $value){
$arr[$r] = $value;
$r++;
}
// เหลือ 82,28,89,98
$count = count($arr);
for ($i = 0; $i <= $count-1; $i++ )
{
echo $arr[$i]."<br />";
}
?>
สิ่งที่จะหาเพิ่มเติมคือ ตอนนี้เลขที่ได้จากการตัดค่าซ้ำออกแล้วจะได้
82
28
89
98
ซึ่งจะเห็นว่า 82 กับ 28 และ 89 กับ 98 เป็นตัวเลขเดียวกันซึ่งแค่สลับตำแหน่งกัน
ทำอย่างไรจะตัดค่าที่เหมือนกันแค่สลับตำแหน่งให้เหลือตัวเลขเพียงค่าเดียวได้ครับ
เช่นผลลัพธ์ที่ต้องการ 82, 89
Tag : PHP, MySQL
|
ประวัติการแก้ไข 2013-09-06 05:34:55 2013-09-06 05:37:14 2013-09-06 05:37:52 2013-09-06 05:38:08 2013-09-06 05:38:26 2013-09-06 05:38:42 2013-09-06 05:38:53
|
|
|
|
|
Date :
2013-09-06 05:33:48 |
By :
pengbuts |
View :
2282 |
Reply :
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?php
function number_reverse($num){
$flag10 = intval($num/10);
$flag1 = $num - ($flag10*10);
return ($flag1*10)+$flag10;
}
$arr_num = array(8,2,8,9,8,2,8); //ตัวอย่างค่าที่รับมา
$count_arr = count($arr_num);
for ($i = 0; $i <= $count_arr-2; $i++ ){
$arr_new[$i] = $arr_num[$i].$arr_num[$i+1]; //จับคู่ หลัก1หลัก2,หลัก2หลัก3,...,หลักnหลักn+1
}
// จะได้ 82,28,89,98,82,28
// ตัดค่าซ้ำ
$r=0;
$arr = array();
$b= array_unique ($arr_new);
foreach($b as $value){
$arr[$r] = $value;
$r++;
}
// เหลือ 82,28,89,98
$count = count($arr);
for ($i = 0; $i < $count; $i++ ){
$isOK = TRUE;
//echo $i;
if($i>0){
for($k = 0; $k < $i; $k++){
//echo $k,' ';
if($arr[$i] == number_reverse($arr[$k])){
$isOK = FALSE;
break;
}
}
//echo '<br>';
}
echo $isOK?($arr[$i]."<br />"):'';
}
?>
http://php.net/manual/en/function.array-unique.php :P
|
ประวัติการแก้ไข 2013-09-06 06:13:01 2013-09-06 06:23:58
|
|
|
|
Date :
2013-09-06 06:05:56 |
By :
itpcc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้วพระเจ้า ขอบคุณพี่ itpcc มากๆเลยครับ ขอนำไปศึกษานะครับๆ
ขอความรู้อีกนิดครับ เห็นฟังก์ชั่นที่พี่เขียนพอจะศึกษาได้
แต่รูปแบบการเขียนแบบนี้ $isOK?($arr[$i]."<br />"):''; มันเรียกว่าอะไร
โดยเฉพาะตรง $isOK?(" "):''; ช่วยอธิบายหรือจะหาศึกษาเพิ่มเติมได้ยังไงครับ
ที่ผมเรียนจากหนังสือที่ซื้อมาไม่เคยเจอเล่มไหนเลยครับ
|
ประวัติการแก้ไข 2013-09-06 07:29:00 2013-09-06 07:33:02 2013-09-06 07:34:17 2013-09-06 07:35:25
|
|
|
|
Date :
2013-09-06 07:16:27 |
By :
pengbuts |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากๆครับๆๆๆ
ขออีกซักนิดครับ คือค่าที่ได้ผมต้องการเอาไปใส่ใน SQL เนื่องจาก $isOK?($arr[$i]):'' นำไปใส่เลยไม่ได้ จะทำยังไงครับ พอสร้าง
$number = $isOK?($arr[$i]):''; แล้วเกิดค่าว่างขึ้นมา
Code (SQL)
SELECT * FROM `table` WHERE number='".$number."'
|
ประวัติการแก้ไข 2013-09-07 01:53:54
|
|
|
|
Date :
2013-09-06 16:21:53 |
By :
pengbuts |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วครับ แต่ไม่รู้มีวิธีที่ง่ายกว่านี้รึเปล่า ทำเหมือนเดิมคือสร้างอาร์เรย์ตัวใหม่มาเก็บค่า จากอาร์เรย์ที่ถูกตัดออกไป
Code (PHP)
<?php
function number_reverse($num){
$flag10 = intval($num/10);
$flag1 = $num - ($flag10*10);
return ($flag1*10)+$flag10;
}
$arr_num = array(8,2,8,9,8,2,8);
$count_arr = count($arr_num);
for ($i = 0; $i <= $count_arr-2; $i++ ){
$arr_new[$i] = $arr_num[$i].$arr_num[$i+1];
}
$r=0;
$arr = array();
$b= array_unique ($arr_new);
foreach($b as $value){
$arr[$r] = $value;
$r++;
}
$count = count($arr);
for ($i = 0; $i < $count; $i++ ){
$isok = TRUE;
if($i>0){
for($k = 0; $k < $i; $k++){
if($arr[$i] == number_reverse($arr[$k])){
$isok = FALSE;
break;
}
}
}
$new_number[$i] = $isok?($arr[$i]):'';
if($new_number[$i]==''){
unset($new_number[$i]);
}
}
$num=0;
$arr_num = array();
$b_num= array_unique ($new_number);
foreach($b_num as $value_num){
$arr_num[$num] = $value_num;
$num++;
}
print_r($arr_num);
?>
|
|
|
|
|
Date :
2013-09-07 02:26:15 |
By :
pengbuts |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2013-09-07 06:53:40 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มาย่อโค๊ดชาวบ้านครับ
<?php
$arr_num = array(8,2,8,9,8,2,8);
$count_arr = count($arr_num);
$data = array();
for ($i = 0; $i <= $count_arr-2; $i++ ){
$data[$i] = $arr_num[$i].$arr_num[$i+1];
}
$unique = array_unique($data); // เหลือ 82,28,89,98
$count = count($unique);
$newArray = array();
for($i = 0; $i < $count; $i++ ){
if(!isset($unique[$i])) continue;
$strNum = (string)$unique[$i];
$rev = (int)strrev($strNum);
if($k = array_search($rev, $unique)){
unset($unique[$k]);
}
}
var_dump($unique);
?>
|
|
|
|
|
Date :
2013-09-07 11:02:56 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้ววว สุดยอดเหลือแค่เนี๊ยๆ ขอบคุณมากๆครับๆๆ
|
|
|
|
|
Date :
2013-09-07 12:01:30 |
By :
pengbuts |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|