Php giá trị cuối cùng của mảng. Mảng PHP: xóa phần tử đầu tiên, cuối cùng, theo giá trị

đầu ra phím (24)

Tôi đang viết trình tạo truy vấn SQL bằng cách sử dụng một số tham số. Trong Java, rất dễ dàng để phát hiện phần tử cuối cùng của mảng từ vòng lặp for bằng cách kiểm tra vị trí hiện tại của mảng với độ dài của mảng.

Vì(int i=0; i< arr.length;i++){ boolean isLastElem = i== (arr.length -1) ? true: false; }

Trong PHP chúng có các chỉ mục không nguyên để truy cập mảng. Vì vậy, bạn phải lặp qua mảng bằng vòng lặp foreach. Điều này trở thành vấn đề khi bạn cần đưa ra một số quyết định (trong trường hợp của tôi, hãy thêm tham số hoặc/và khi xây dựng truy vấn).

Tôi chắc chắn phải có một số cách tiêu chuẩn để làm điều này.

Làm thế nào để bạn giải quyết điều này trong PHP?

Câu trả lời

Bạn cũng có thể làm một cái gì đó như thế này:

Kết thúc($elements); $endKey = key($elements); foreach ($elements as $key => $value) ( ​​​​if ($key == $endKey) // -- đây là mục cuối cùng ( // làm gì đó ) // thêm mã )

Bạn cũng có thể thử cách này để thực hiện truy vấn của mình...hiển thị ở đây bằng cách sử dụng INSERT

"thứ hai","hai"=>"thứ ba","ba"=>"thứ tư","bốn"=>"thứ năm","năm"=>"thứ sáu","sáu"=>"thứ bảy"," bảy"=>"chủ nhật"); $keys = array_keys($week); $string = "XÁC NHẬN VÀO my_table (""; $string .= implode("","", $keys); $string .= "") GIÁ TRỊ (""; $string .= implode("","" , $tuần); $string .= "");"; tiếng vang $chuỗi; ?>

Tôi có cảm giác mạnh mẽ rằng gốc rễ của "vấn đề XY" này OP chỉ đơn giản muốn có một hàm implode().

Vì mục đích tìm mảng EOF của bạn chỉ là keo dán. Hãy xem các chiến thuật dưới đây. Bạn không cần EOF:

$given_array = array("column1"=>"value1", "column2"=>"value2", "column3"=>"value3"); $keo = ""; foreach($given_array as $column_name=>$value)( $where .= " $glue $column_name = $value"; // gắn thêm keo $glue = "AND"; ) echo $where;

Cột1 = giá trị1 VÀ cột2 = giá trị2 VÀ cột3 = giá trị3

Đây là một cách khác để làm điều đó:

$arr = phạm vi (1, 10); $end = end($arr); đặt lại($arr); while(list($k, $v) = each($arr)) ( if($n == $end) ( echo "last!"; ) else ( echo sprintf("%s ", $v); ) )

Đối với các kịch bản tạo truy vấn SQL hoặc bất kỳ hành động nào khác trên phần tử đầu tiên hoặc cuối cùng, việc tránh sử dụng các kiểm tra biến không cần thiết sẽ nhanh hơn nhiều (nhanh gần như gấp đôi).

Giải pháp được chấp nhận hiện tại sử dụng vòng lặp và kiểm tra bên trong vòng lặp sẽ được thực hiện mọi_single_iteration, cách chính xác (nhanh) để thực hiện việc này là:

$numItems = đếm($arr); $i=0; $firstitem=$arr; $i++; trong khi($i<$numItems-1){ $some_item=$arr[$i]; $i++; } $last_item=$arr[$i]; $i++;

Một thử nghiệm nhỏ tại nhà cho thấy như sau:

test1: 100.000 lần chạy mô hình nhà xác

thời gian: 1869,3430423737 mili giây

test2: 100.000 lần chạy mô hình, nếu là phiên bản mới nhất

thời gian: 3235,6359958649 mili giây

Tôi thích những điều sau đây vì tôi cảm thấy nó khá gọn gàng. Giả sử chúng ta tạo một chuỗi có dấu phân cách giữa tất cả các phần tử: ví dụ: a, b, c

$đầu tiên = đúng; foreach ($items as $item) ( $str = ($first)?$first=false:", ".$item; )

$page_comment): ?>

Khi toEnd về 0, điều đó có nghĩa là nó đang ở lần lặp cuối cùng của vòng lặp.

$toEnd = đếm($arr); foreach($arr as $key=>$value) ( ​​​​if (0 === --$toEnd) ( echo "last index! $value"; ) )

Giá trị cuối cùng vẫn có sẵn sau vòng lặp, vì vậy nếu bạn chỉ muốn sử dụng nó cho nhiều thứ hơn sau vòng lặp thì điều này tốt hơn:

Foreach($arr as $key=>$value) ( ​​//something ) echo "last index! $key => $value";

Nếu bạn không muốn coi giá trị cuối cùng là các vòng lặp bên trong đặc biệt. Điều này sẽ nhanh hơn nếu bạn có mảng lớn. (Nếu bạn đang sử dụng lại một mảng sau một vòng lặp trong cùng một phạm vi, trước tiên bạn cần "sao chép" mảng đó).

//Nếu bạn sử dụng mã này trong một mã toàn cầu lớn không có không gian tên hoặc hàm thì bạn có thể sao chép mảng như thế này: //$array = $originArrayName; //bỏ ghi chú để sao chép một mảng bạn có thể sử dụng sau vòng lặp này //end($array); $lastKey = key($array); //bỏ ghi chú nếu bạn sử dụng các phím $lastValue = array_pop($array); // làm điều gì đó đặc biệt với giá trị cuối cùng ở đây trước khi bạn xử lý tất cả những giá trị khác? echo "Cuối cùng là $lastValue", "\n"; foreach ($array as $key => $value) ( ​​//làm điều gì đó với tất cả các giá trị trước giá trị cuối cùng echo "Tất cả ngoại trừ giá trị cuối cùng: $value", "\n"; ) //làm điều gì đó đặc biệt với giá trị cuối cùng ở đây sau khi bạn xử lý tất cả những giá trị khác? echo "Cuối cùng là $lastValue", "\n";

Và để trả lời câu hỏi ban đầu của bạn "trong trường hợp của tôi, hãy thêm tham số or/and khi xây dựng truy vấn"; điều này sẽ bao gồm tất cả các giá trị và sau đó nối chúng thành một chuỗi có "và" ở giữa chúng, nhưng không phải trước giá trị đầu tiên hoặc sau giá trị cuối cùng:

$params = ; foreach ($array as $value) ( ​​$params = doSomething($value); ) $parameters = implode(" và ", $params);

Bạn vẫn có thể sử dụng phương pháp này với mảng kết hợp:

$keys = array_keys($array); với ($i = 0, $l = count($array); $i< $l; ++$i) { $key = $array[$i]; $value = $array[$key]; $isLastItem = ($i == ($l - 1)); // do stuff } // or this way... $i = 0; $l = count($array); foreach ($array as $key =>$value) ( ​​$isLastItem = ($i == ($l - 1)); // làm công việc ++$i; )

Một cách khác là ghi nhớ kết quả trước đó của vòng lặp và sử dụng nó làm kết quả cuối cùng:

$kết quả = $where = ""; foreach ($conditions as $col => $val) ( $result = $where .= $this->getAdapter()->quoteInto($col." = ?", $val); $where .= " AND " ; ) trả về $this->delete($result);

Cá nhân tôi sử dụng một thiết kế như thế này để dễ dàng sử dụng các phần tử html

  • : Chỉ cần thay đổi đẳng thức cho thuộc tính khác...

    Một mảng không thể chứa các phần tử sai, nhưng tất cả các phần tử khác đều được chuyển đến giá trị boolean sai.

    $table = array("a", "b", "c"); $it = đặt lại ($bảng); while($it !== false) ( echo "all loops";echo $it; $nextIt = next($table); if ($nextIt === false || $nextIt === $it) ( echo " vòng lặp cuối cùng hoặc hai mục giống hệt nhau"; ) $it = $nextIt; )

    Bạn có thể trực tiếp lấy chỉ mục mới nhất:

    $numItems = đếm($arr);

    echo $arr[$numItems-1];

    Giả sử bạn có một mảng được lưu trữ trong một biến...

    Foreach($array as $key=>$value) ( ​​​​echo $value; if($key != count($array)-1) ( echo ", "; ) )

    Có vẻ như bạn muốn một cái gì đó như thế này:

    $array = array("Đầu tiên", "Thứ hai", "Thứ ba", "Cuối cùng"); foreach($array as $key => $value) ( ​​​​if(end($array) === $value) ( ​​​​echo "last index!" . $value; ) )

    Nếu bạn cần làm gì đó cho mọi phần tử ngoại trừ phần tử đầu tiên hoặc phần tử cuối cùng và chỉ khi có nhiều hơn một phần tử trong mảng, tôi thích giải pháp sau.

    Tôi biết có nhiều giải pháp ở trên và được đăng trước tôi hàng tháng/năm, nhưng đây là điều tôi cảm thấy khá thanh lịch. Kiểm tra từng vòng lặp cũng là kiểm tra logic, trái ngược với kiểm tra số "i = (count-1)", có thể giảm chi phí.

    Cấu trúc vòng lặp có vẻ khó xử, nhưng bạn có thể so sánh nó với thứ tự của các thẻ (bắt đầu), tfoot (kết thúc), tbody (hiện tại) trong bảng HTML.

    $đầu tiên = đúng; foreach($array as $key => $value) ( ​​​​ if ($first) ( $first = false; // Thực hiện những gì bạn muốn làm trước phần tử đầu tiên echo "Danh sách các cặp khóa, giá trị:\n" ; ) else ( // Làm những gì bạn muốn làm ở cuối mỗi phần tử // ngoại trừ phần tử cuối cùng, giả sử danh sách có nhiều hơn một phần tử echo "\n"; ) // Làm những gì bạn muốn làm cho hiện tại phần tử echo $key . " => " .

    Ví dụ: trong thuật ngữ phát triển web, nếu bạn muốn thêm border-bottom cho mọi phần tử ngoại trừ phần tử cuối cùng trong danh sách không có thứ tự (ul) thì thay vào đó bạn có thể thêm border-top cho mọi phần tử ngoại trừ phần tử đầu tiên(CSS:first-child, được hỗ trợ bởi IE7+ và Firefox/Webkit, hỗ trợ logic này, trong khi:last-child không được IE7 hỗ trợ).

    Bạn có thể thoải mái sử dụng lại biến $first cho mỗi vòng lặp lồng nhau và mọi thứ sẽ hoạt động tốt vì mỗi vòng lặp tạo ra $first sai trong quá trình đầu tiên của lần lặp đầu tiên (vì vậy, việc ngắt/ngoại lệ sẽ không gây ra sự cố).

    $đầu tiên = đúng; foreach($array as $key => $subArray) ( if ($first) ( $string = "Danh sách các cặp khóa => giá trị mảng:\n"; $first = false; ) else ( echo "\n"; ) $string .= $key . "=>("; $first = true; foreach($subArray as $key => $value) ( ​​​​if ($first) ( $first = false; ) else ( $string .= ", "; ) $string .= $key . "=>" $string .= ")";

    Đầu ra ví dụ:

    Danh sách các cặp mảng key => value: key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2) key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3) key3=>(v3_key1=>v3_val1 )

    Một cách có thể là phát hiện vòng lặp tiếp theo. Nếu không có phần tiếp theo trên trình vòng lặp, điều đó có nghĩa là bạn đang ở vòng lặp cuối cùng.

    Foreach ($some_array as $element) ( if(!next($some_array)) ( // Đây là $element cuối cùng ) )

    Vì vậy, nếu mảng của bạn có các giá trị mảng duy nhất thì việc xác định lần lặp cuối cùng là chuyện nhỏ:

    Foreach($array as $element) ( if ($element === end($array)) echo "LAST ELEMENT!"; )

    Như bạn có thể thấy, điều này có hiệu quả nếu phần tử cuối cùng chỉ xuất hiện một lần trong mảng, nếu không bạn sẽ nhận được cảnh báo sai. Trong phần này, không, bạn cần so sánh các khóa (tất nhiên là duy nhất).

    Foreach($array as $key => $element) ( end($array); if ($key === key($array)) echo "LAST ELEMENT!"; )

    Cũng lưu ý toán tử liên hệ nghiêm ngặt, điều này khá quan trọng trong trường hợp này.

    Đây là giải pháp của tôi: chỉ cần lấy bộ đếm của mảng của bạn, trừ 1 (bắt đầu từ 0).

    $lastkey = count($array) - 1; foreach($array as $k=>$a)( if($k==$lastkey)( /*do something*/ ) )

    Có vẻ như bạn muốn một cái gì đó như thế này:

    $numItems = đếm($arr); $i = 0; foreach($arr as $key=>$value) ( ​​​​if(++$i === $numItems) ( echo "last index!"; ) )

    Nói như vậy, bạn không muốn - lặp lại một "mảng" bằng cách sử dụng foreach trong php.

    Đã có nhiều câu trả lời, nhưng cũng đáng để xem xét các trình vòng lặp, đặc biệt vì nó được yêu cầu theo cách tiêu chuẩn:

    $arr = phạm vi (1, 3); $it = new CachingIterator(new ArrayIterator($arr)); foreach($it as $key => $value) ( ​​​​ if (!$it->hasNext()) echo "Last:"; echo $value, "\n"; )

    Bạn có thể tìm thấy thứ gì đó giúp nó linh hoạt hơn cho các trường hợp khác.

    Lỗi nghiêm trọng: Gọi hàm thành viên... trên một đối tượng không phải

    Xảy ra với mã tương tự như xyz->method() trong đó xyz không phải là một đối tượng và do đó phương thức này không thể được gọi.

    Đây là một lỗi nghiêm trọng sẽ dừng tập lệnh (thông báo về khả năng tương thích về phía trước: điều này sẽ trở thành một lỗi bắt bắt đầu từ PHP 7).

    Thông thường, đây là dấu hiệu cho thấy mã thiếu tính năng kiểm tra lỗi. Xác nhận rằng một đối tượng thực tế là một đối tượng trước khi gọi các phương thức của nó.

    một ví dụ điển hình sẽ là

    // ... một số mã sử dụng PDO $statement = $pdo->prepare("truy vấn không hợp lệ", ...); $statement->execute(...);

    Trong ví dụ trên, yêu cầu không thể được chuẩn bị và prepare() gán false cho $statement . Việc cố gắng gọi phương thức exec() sẽ dẫn đến Lỗi nghiêm trọng vì false là "không phải đối tượng" vì giá trị là boolean.

    Tìm ra Tại sao hàm của bạn trả về giá trị boolean thay vì một đối tượng. Ví dụ: kiểm tra đối tượng $pdo để biết lỗi cuối cùng đã xảy ra. Chi tiết về cách gỡ lỗi này sẽ phụ thuộc vào cách xử lý lỗi đối với hàm/đối tượng/lớp cụ thể.

    Ngay cả khi ->prepare không thành công, cơ sở dữ liệu của bạn xử lý $pdo không nằm trong phạm vi hiện tại. Tìm nơi anh quyết định. Sau đó chuyển nó dưới dạng tham số, lưu trữ dưới dạng thuộc tính hoặc chia sẻ nó qua phạm vi toàn cầu.

    Một vấn đề khác có thể là tạo một đối tượng có điều kiện và sau đó cố gắng gọi một phương thức bên ngoài khối điều kiện đó. Ví dụ

    If ($someCondition) ( $myObj = new MyObj(); ) // ... $myObj->someMethod();

    Bằng cách cố gắng thực thi một phương thức bên ngoài khối điều kiện, đối tượng của bạn không thể được xác định.

    Câu hỏi liên quan:

    • Gọi hàm thành viên trên một phi đối tượng
    • Danh sách tất cả các câu hỏi PHP "Lỗi nghiêm trọng: Gọi hàm thành viên... không phải đối tượng"

    Mảng PHP được sử dụng ở mọi nơi. Việc thêm và thay đổi các giá trị thường đơn giản.

    Loại bỏ các phần tử mảng là một thao tác đặc biệt. Bạn có thể chỉ cần xóa phần tử hoặc bạn có thể xóa phần tử đó và sử dụng nó. Sắc thái này mang đến những cơ hội tuyệt vời.

    Mảng PHP

    PHP là ngôn ngữ lập trình hiện đại, chức năng làm việc với mảng được thực hiện ở mức cao. Lập trình viên có cơ hội sử dụng các mảng thông thường và mảng kết hợp, thiết kế cấu trúc dữ liệu đa chiều và có bất kỳ giá trị nào dưới dạng các phần tử mảng.

    Có một bộ hàm được phát triển để làm việc với mảng và các cấu trúc cú pháp đặc biệt. Có thể duyệt mảng bằng thuật toán của riêng bạn và gán các hàm xử lý của riêng bạn.

    Ví dụ về tạo và sử dụng mảng

    Chức năng scPrint là chức năng phụ trợ. Nó viết đệ quy một mảng thành một chuỗi ký tự để minh họa kết quả mà nó tạo ra.

    Mảng $aFruits được tạo theo cách thông thường: các giá trị được liệt kê, các chỉ mục được gán tự động từ đầu. Dấu phẩy cuối cùng không liên quan và không tạo ra phần tử trống khác.

    Mảng $aData được tạo trống, sau đó các giá trị được thêm vào mảng đó. Ba là tự động và hai là có chỉ mục kết hợp không ảnh hưởng đến việc đánh số tổng thể các giá trị. Do đó, các phần tử “mận” và “đào” lần lượt có các chỉ số “mới” và “tươi”.

    Mảng $aInfo có tính đa chiều và liên kết.

    Ba thao tác xóa chỉ ra cách xóa một phần tử trong mảng PHP.

    Thao tác đầu tiên loại bỏ phần tử thứ hai khỏi mảng $aFruits, chỉ số của nó là 1. Cần lưu ý rằng các chỉ số sau không bị dịch chuyển, điều đó có nghĩa là trong các thao tác tuần hoàn với mảng như vậy cần kiểm tra sự tồn tại của phần tử .

    Thao tác thứ hai xóa phần tử cuối cùng và đầu tiên trong mảng $aData, xác nhận rằng việc xóa không ảnh hưởng đến chỉ mục và khả năng xóa đồng thời một số phần tử.

    Cái thứ ba xóa một mảng trong một mảng và một phần tử trong mảng là một phần của mảng khác.

    Loại bỏ các phần tử thông thường - không đặt

    Chức năng unset sẽ bị loại bỏ. Không có vấn đề gì. Nó chỉ có thể là một biến hoặc một phần tử mảng. unset() được coi là toán tử ngôn ngữ, không phải là hàm. Toán tử này không trả về bất kỳ giá trị nào và nó "hủy" những gì được truyền cho nó dưới dạng tham số. Biến hoặc mảng biến mất như thể nó chưa từng tồn tại.

    Trong PHP, bạn có thể loại bỏ các phần tử mảng trống theo nhiều cách khác nhau; trên thực tế, cái gì được coi là phần tử trống tùy thuộc vào người lập trình. Tuy nhiên, sẽ không khôn ngoan lắm khi sử dụng nhiều tham số trong toán tử unset() cho mục đích này. Sẽ thực tế hơn nếu chuyển các hoạt động nhóm thành các chức năng nhóm.

    Máy tính hiện đại rất nhanh và PHP rất nhanh. Nhưng đây không phải là lý do để tạo và xử lý hàng tấn thông tin bằng các thuật toán rườm rà; đây là lý do khách quan để tiếp cận quá trình loại bỏ các phần tử mảng theo những cách lũy tiến.

    Xóa phần tử bằng phương thức chuỗi

    Trong PHP, bạn có thể loại bỏ hàng loạt phần tử mảng trống bằng cách chuyển đổi mảng thành chuỗi và trả về. Nhưng trường hợp này chỉ phù hợp với các phần tử thực sự trống, thiếu chỉ mục hoặc nhằm mục đích lập chỉ mục lại một mảng.

    Khái niệm phần tử trống phụ thuộc vào nhiệm vụ. Thông thường, một phần tử mảng hiện có chứa thông tin nhất định sẽ trở nên trống rỗng. Ví dụ: một mảng ghi lại khách truy cập. Phần tử mảng chứa:

    • thời gian đến của du khách;
    • chế độ hoạt động hiện tại;
    • trang hoạt động;
    • lần hành động cuối cùng.

    Nếu chênh lệch giữa thời gian đến và thời gian của hành động cuối cùng lớn hơn 1 phút (hoặc giá trị khác), chúng tôi có thể cho rằng khách hàng đã rời khỏi trang web. Hồ sơ về những khách hàng như vậy có thể bị xóa nếu nhiệm vụ là giám sát danh sách khách truy cập đang hoạt động và không sử dụng các phương pháp nâng cao hơn bằng JavaScript.

    Tuy nhiên, việc xử lý "dòng" là tốt. Ví dụ: trong PHP bạn có thể loại bỏ các phần tử mảng trùng lặp như thế này:

    Cách nhanh chóng và giá cả phải chăng. Không nhất thiết phải sử dụng ký hiệu “[” và “]” để biểu thị từng phần tử, nhưng hãy nhớ rằng khi chuyển đổi một mảng thành chuỗi, bạn phải đảm bảo rằng mỗi phần tử là duy nhất. Các ký tự đóng khung phải được chọn dựa trên các ký tự được phép có trong phần tử. Một quy tắc không thể lay chuyển: mỗi phần tử mảng trong một hàng là duy nhất và có vị trí của nó (nếu không thì không thể trả lại thứ gì).

    Phương pháp này thuận tiện hơn khi nhiệm vụ trong PHP là loại bỏ một phần tử mảng theo giá trị. Bạn có thể sử dụng hàm array_flip và hoán đổi các giá trị cũng như khóa, sau đó thực hiện thao tác hủy đặt cổ điển. Bạn có thể sử dụng hàm array_search và tìm khóa của giá trị bạn muốn xóa. Nhưng phiên bản chữ thường của giải pháp rõ ràng và đơn giản hơn.

    PHP thực tế không giới hạn nhà phát triển về bất cứ điều gì: cả về số lượng kích thước cũng như kích thước của các phần tử. Không có ý nghĩa gì khi tham gia vào việc này. Mỗi phần tử phải có độ dài tối thiểu có thể và số chiều sẽ có xu hướng là một.

    Nếu số chiều của mảng lớn hơn ba thì đây là lý do chính đáng để xem xét lại quyết định. Nếu một phần tử mảng dài hơn 4000-8000 ký tự, sẽ nảy sinh nghi ngờ về tính hợp lý của bức tranh dữ liệu được xây dựng.

    Ý kiến ​​​​này không xuất phát từ bối cảnh chức năng của mảng PHP: loại bỏ một phần tử, thêm một đối tượng thuộc loại khác, thay đổi một thứ thành một thứ hoàn toàn khác. Sự đơn giản là chìa khóa thành công không chỉ trong cuộc sống mà còn trong thuật toán. Chương trình sẽ hoạt động và không gây ngạc nhiên với quy mô, quy mô và quy mô ý tưởng của nó. Quan trọng là kết quả chứ không phải ý tưởng lớn.

    Là ngôn ngữ lập trình hiện đại, PHP không bỏ qua đệ quy và ngăn xếp. Về cơ bản, ý nghĩa của lập trình viên không quan trọng khi anh ta sử dụng hàm array_pop() trong PHP: loại bỏ phần tử cuối cùng của mảng hoặc đơn giản là đưa nó vào một biến nào đó.

    Nhưng hãy nhớ rằng trong ngữ cảnh này, hàm array_pop là một hàm push & pop, tức là nó là một công cụ ngăn xếp chứ không phải một công cụ xóa.

    Ở đây người ta thường nói không phải là "xóa" mà là "trích xuất". Các ngữ nghĩa là khác nhau đáng kể. Tuy nhiên, hàm array_shift() trong PHP - loại bỏ phần tử đầu tiên của mảng hoặc trích xuất nó - có một hàm ý khác. Ở đây, phần tử cũng được truy xuất vào một biến ngoài và sẽ không có trong mảng nhưng các chỉ số sẽ được dịch chuyển.

    Khi phần tử đầu tiên được trích xuất từ ​​một mảng, tất cả các phần tử theo sau nó sẽ được dịch chuyển về phía trước, nhưng chỉ các chỉ số dạng số thay đổi;

    Xóa hoặc thay đổi: lịch sử giao dịch

    Một biến đã có từ rất lâu rồi, một mảng đã có từ rất lâu rồi, một đồ vật là ngày hôm qua. Lập trình hướng đối tượng vẫn chỉ được nói đến chứ chưa phát huy được hết tiềm năng của nó. Hiếm khi các giải pháp hời hợt lại trở thành chủ đề của các giải pháp nhiệt tình và hệ thống quản lý nội dung (CMS) “khôn ngoan” với nhiều “nội dung”.

    Quy tắc khách quan: vấn đề không phải là số lượng mã mà là chất lượng của nó! Nhưng chưa có CMS hiện đại nào chú ý đến quy tắc này. Các tác giả của nó tin rằng họ đang làm điều đúng đắn và biết họ đang làm gì.

    Kết quả (tính năng đặc trưng): không có CMS hiện đại nào được phân biệt bằng một “hình dáng” đàng hoàng (độ mảnh mai và nhẹ nhàng của thiết kế), tất cả đều có mức độ hoàn thiện cao về mã, mỗi thứ đều yêu cầu sự tôn trọng:

    • lập trình viên có trình độ cao;
    • cần cài đặt;
    • áp đặt các yêu cầu lưu trữ;
    • gây khó khăn khi chuyển sang hosting khác;
    • thực sự làm chậm công việc và quản lý.

    Các lập trình viên đã đến với khái niệm rollback từ rất lâu; lập trình hiện đại không thể tưởng tượng được việc tạo ra phần mềm mà không có hai chức năng:

    • Hoàn tác;
    • làm lại.

    Sai lầm không chỉ là bản chất của con người mà trong bất kỳ tình huống nào cũng phải có sự rút lui. Trong các công cụ lập trình Internet hiện đại cho đến ngày nay, điểm này không những không còn quan trọng mà còn được sử dụng ở quy mô rất hạn chế.

    Các thao tác PHP trên một mảng: loại bỏ một phần tử, thay đổi kiểu của nó hoặc thêm một cái gì đó mới đều rõ ràng. Nhưng trước khi có biến, rồi mảng, rồi đối tượng. Không có lý do gì để nghĩ về thực tế rằng mảng chỉ là một biến theo thời gian?

    Mảng là một cấu trúc dữ liệu theo thời gian. Không có ngôn ngữ nào cho đến ngày nay coi thời gian là một yếu tố trong cú pháp. Bạn thậm chí không cần phải nói về ngữ nghĩa: từ xa xưa cho đến ngày nay, các lập trình viên và người dùng chỉ hiểu các tập tin và thư mục. Ví dụ, sự phát triển đã đạt đến mức tối đa trong PHP, không gian tên được phản ánh một cách tầm thường trong cấu trúc của các thư mục và tệp.

    Trong ngữ cảnh này, các hành động tầm thường trong PHP trên một mảng: xóa một phần tử, thay đổi hoặc thêm - yêu cầu các hành động bổ sung từ lập trình viên. Bạn có thể để mọi thứ như cũ và nó sẽ diễn ra như mọi khi. Bạn có thể tính đến mọi thao tác trên dữ liệu và ghi lại đầy đủ, tạo và lưu trữ lịch sử thao tác.

    Đây sẽ là một mức độ công việc hoàn toàn khác và chất lượng kết quả hoàn toàn tốt hơn.

    Reg.ru: tên miền và lưu trữ

    Nhà đăng ký và cung cấp dịch vụ lưu trữ lớn nhất ở Nga.

    Hơn 2 triệu tên miền đang được sử dụng.

    Khuyến mãi, mail tên miền, giải pháp kinh doanh.

    Hơn 700 nghìn khách hàng trên khắp thế giới đã đưa ra lựa chọn của mình.

    Khung Bootstrap: bố cục thích ứng nhanh

    Khóa học video từng bước về kiến ​​thức cơ bản về bố cục thích ứng trong khung Bootstrap.

    Tìm hiểu cách sắp chữ đơn giản, nhanh chóng và hiệu quả bằng cách sử dụng một công cụ mạnh mẽ và thiết thực.

    Bố trí để đặt hàng và được trả tiền.

    * Di chuột qua để tạm dừng cuộn.

    Quay lại phía trước

    PHP: Loại bỏ các phần tử mảng

    Chúng ta phải đối mặt với một nhiệm vụ có vẻ tầm thường: loại bỏ một phần tử mảng. Hoặc một số yếu tố.

    Tuy nhiên, vì sự đơn giản của nó, có những tùy chọn không hoàn toàn rõ ràng và đáng để biết nếu bạn muốn nâng cao PHP hơn một chút so với "Xin chào thế giới!"

    Hãy bắt đầu với chính phần tử cơ sở: để xóa một phần tử, bạn cần sử dụng hàm bỏ đặt():

    Bỏ đặt ($ mảng); unset($array["foo"]);

    Unset($array, $array); unset($array["foo"], $array["bar"]);

    Câu hỏi hợp lý tiếp theo là: làm thế nào để xóa nhiều phần tử nối tiếp nhau (tức là liền kề)? Để loại bỏ nhiều phần tử liền kề, hãy sử dụng hàm mảng_splice():

    Mảng_splice($array, $offset, $length);

    Xin lưu ý rằng khi sử dụng các hàm này, tất cả các tham chiếu đến các phần tử này sẽ biến mất. Nếu bạn muốn để lại một khóa trong mảng nhưng liên kết nó với một giá trị trống, hãy gán phần tử mong muốn vào một chuỗi trống:

    $array = $array["foo"] = "";

    Điều quan trọng là phải hiểu rằng chức năng bỏ đặt() loại bỏ phần tử, trong khi gán "" cho phần tử không loại bỏ phần tử đó mà làm cho giá trị của nó bằng chuỗi trống.

    Nếu bạn làm việc với các con số, có lẽ sẽ tốt hơn nếu kết hợp giá trị 0 với một khóa như vậy.

    Giả sử, nếu một công ty đã ngừng sản xuất các bộ phận cho mẫu HBL-568 thì có thể thực hiện thay đổi đối với mảng bộ phận:

    Unset($products["HBL-568"]);

    Nếu bộ phận HBL-568 chỉ tạm thời không có trong kho và dự kiến ​​sẽ được chuyển đến từ nhà máy, thì tốt hơn hết bạn nên làm khác:

    $products["HBL-568"] = 0;

    Điểm tiếp theo cần hiểu là khi gọi một hàm bỏ đặt()đối với phần tử mảng, PHP điều chỉnh mảng sao cho vòng lặp vẫn hoạt động chính xác.

    Nói cách khác, mảng không được nén để lấp đầy các “lỗ hổng” được tạo ra. Về cơ bản, điều này có nghĩa là tất cả các mảng đều có tính kết hợp, ngay cả khi thoạt nhìn chúng có vẻ là số. Hãy xem xét các ví dụ rõ ràng để minh họa hành vi này:

    // Tạo một mảng "số" $animals = array("ant", "bee", "cat", "dog", "elk", "fox"); in $động vật; // In "bee" print $animals; // In ra số đếm "cat"($animals); // Trả về 6 // unset() unset($animals); // Loại bỏ một phần tử $animals = "bee" print $animals; // Không xuất ra bất cứ thứ gì và báo lỗi E_NOTICE print $animals; // In ra số đếm "cat"($animals); // Trả về 5 trong khi phần tử $array vẫn giữ nguyên vị trí và chứa "fox" // Thêm phần tử mới $animals = "gnu"; // Thêm một phần tử mới print $animals; // Không in gì cả, còn báo lỗi E_NOTICE print $animals; // In "gnu" count($animals); // Trả về 6 // Gán "" (chuỗi trống) $animals = ""; // Đặt thành "chuỗi trống" print $animals; // In "" count($animals); // Trả về 6, tức là tính đến phần tử mảng trống khi đếm

    Để truy cập vào một mảng số có mật độ dân cư đông đúc, hãy sử dụng hàm mảng_values():

    $animals = array_values($animals);

    Ngoài ra, hàm array_splice() sẽ tự động lập chỉ mục lại các mảng để loại bỏ các “lỗ hổng”:

    // Tạo một mảng "số" $animals = array("ant", "bee", "cat", "dog", "elk", "fox"); mảng_splice($animals, 2, 2); print_r($ động vật);

    Ở đầu ra, chúng tôi nhận được:

    Mảng ( => kiến ​​=> ong ​​=> nai sừng tấm => cáo)

    Tính năng này có thể hữu ích ở đâu?

    Giả sử bạn đang làm việc với một mảng dưới dạng hàng đợi và muốn xóa các phần tử khỏi hàng đợi này mà không làm mất khả năng truy cập ngẫu nhiên, khi bạn có thể vô tình rơi vào một trong các "lỗ hổng" tạo ra.

    Và cuối cùng, để loại bỏ phần tử đầu tiên hoặc cuối cùng khỏi mảng một cách an toàn, các hàm mảng_shift()mảng_pop() tương ứng.

    Mọi thứ đều rất đơn giản với họ:

    $stack = array("cam", "chuối", "táo", "quả mâm xôi"); $fruit = array_shift($stack); print_r($stack);

    Kết quả của việc thực thi đoạn mã trên, chúng ta sẽ nhận được kết quả đầu ra sau:

    Mảng ( => chuối => táo => mâm xôi)

    Để loại bỏ phần tử cuối cùng, hãy sử dụng hàm mảng_pop():

    $stack = array("cam", "chuối", "táo", "quả mâm xôi"); $fruit = array_pop($stack); print_r($stack);

    Đầu ra là bản in mảng sau:

    Mảng ( => cam => chuối => táo)

    Đó là tất cả. Chúng ta đã thảo luận những điểm chính về việc xóa các phần tử mảng trong PHP. Nếu có bất cứ điều gì xảy ra, tài liệu chính thức luôn hữu ích.

    Bạn có thích tài liệu này và muốn cảm ơn tôi không?
    Chỉ cần chia sẻ với bạn bè và đồng nghiệp của bạn!


    Xem thêm: