ทางเลือกแยก PHP?


92

PHP กำลังบอกฉันว่าการแยกเลิกใช้แล้วฉันควรใช้วิธีอื่นอย่างไร

คำตอบ:


131

explodeเป็นอีกทางเลือกหนึ่ง อย่างไรก็ตามหากคุณต้องการแยกนิพจน์ทั่วไปทางเลือกคือpreg_splitแทน


15
ผมไม่เห็นด้วย - explodeไม่ได้เป็นทางเลือกเพราะมันไม่ได้ดำเนินการการทำงานเช่นเดียวsplitนั่นคือ: การแยกสตริงโดยการแสดงออกปกติ เพื่อจุดประสงค์นั้นให้ใช้preg_split.
nickf

1
@nickf: ถูกต้องแล้วฉันควรจะเพิ่มสิ่งนั้นในตอนแรก ขอบคุณ
Sarfraz

ในภาษาต่างๆsplitเมธอดไม่ยอมรับนิพจน์ทั่วไปเสมอไป ใน. NET, Python, String.Split()/ str.split()method ยอมรับเฉพาะสตริงคงที่และเป็นตัวอักษรเป็นเข็ม ดังนั้นจึงexplodeถูกต้อง สำหรับผู้ที่มาจาก Java, JavaScript, Ruby preg_splitอาจเป็นวิธีแก้ปัญหา
Wiktor Stribiżew

เข้ากันได้กับ String.Split () ของ Visual Basic .NET Nice
Md Ashraful Islam

22

splitเลิกใช้งานเนื่องจากเป็นส่วนหนึ่งของตระกูลฟังก์ชันที่ใช้นิพจน์ทั่วไป POSIX ทั้งครอบครัวเลิกใช้งานpreg_*ฟังก์ชันPCRE ( )

หากคุณไม่จำเป็นต้องมีฟังก์ชั่นการแสดงออกปกติแล้วexplodeเป็นทางเลือกที่ดีมาก (และจะได้รับการแนะนำมากกว่าsplitแม้ว่าที่ไม่ได้ถูกเลิกใช้แล้ว) ถ้าในมืออื่น ๆ ที่คุณทำจำเป็นต้องใช้การแสดงออกปกติแล้วสลับ PCRE preg_splitเป็นเพียง


16
  • preg_split หากคุณต้องการแยกตามนิพจน์ทั่วไป
  • str_split หากคุณต้องการแยกตามอักขระ
  • explode หากคุณต้องการแยกสิ่งที่เรียบง่าย

นอกจากนี้ในอนาคตหากคุณต้องการทราบว่า PHP ต้องการให้คุณใช้อะไรหากมีการเลิกใช้งานคุณสามารถตรวจสอบฟังก์ชันในคู่มือได้ตลอดเวลาและจะบอกทางเลือกอื่นให้คุณ


7

ฉันต้องการเคลียร์ตรงนี้ซึ่งpreg_split();อยู่ห่างไกลออกไป แต่explode();สามารถใช้ในลักษณะเดียวกับsplit();

ต่อไปนี้เป็นการเปรียบเทียบระหว่างsplit();และexplode();การใช้งาน

วิธีใช้ Split ()

<?php

$date = "04/30/1973";
list($month, $day, $year) = split('[/.-]', $date);
echo $month; // foo
echo $day; // *
echo $year;

?>

URL: http://php.net/manual/en/function.split.php

สามารถใช้ Explode () ได้อย่างไร

<?php

$data = "04/30/1973";
list($month, $day, $year) = explode("/", $data);
echo $month; // foo
echo $day; // *
echo $year;

?>

URL: http://php.net/manual/en/function.explode.php

นี่คือวิธีที่เราสามารถใช้ได้ :)


2

คุณสามารถใช้ฟังก์ชันที่ง่ายกว่า preg_match แทนได้ดีกว่าและเร็วกว่าฟังก์ชันอื่น ๆ ทั้งหมด

$var = "<tag>Get this var</tag>";
preg_match("/<tag>(.*)<\/tag>/", $var , $new_var);
echo $new_var['1']; 

เอาท์พุต: Get this var




0

มีปัญหาเดียวกัน แต่โค้ดของฉันต้องทำงานได้ทั้ง PHP 5 และ PHP 7 ..

นี่คือโค้ดส่วนหนึ่งของฉันซึ่งแก้ไขปัญหานี้ .. ป้อนวันที่ในรูปแบบ dmY ด้วยตัวคั่น "/. -"

<?php
function DateToEN($date){
  if ($date!=""){
    list($d, $m, $y) = function_exists("split") ?  split("[/.-]", $date) : preg_split("/[\/\.\-]+/", $date);
    return $y."-".$m."-".$d;
  }else{
    return false;
  }
}
?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.