PHP rút gọn và giải nén

Hàm compact( ) là một hàm sẵn có của PHP, dùng để tạo mảng từ các biến và giá trị của chúng. Chức năng này đã được giới thiệu trong PHP 4+

cú pháp

Thông số

Tham sốMô tảLà bắt buộcVariable1Nó có thể là một chuỗi chứa tên của biến hoặc một mảng tên biến. bắt buộcVariable2Nó có thể là một chuỗi chứa tên của biến hoặc một mảng tên biến. Không bắt buộc

Giá trị trả về

Hàm này trả về một mảng với tất cả các biến được thêm vào nó

Lưu ý quan trọng

Bất kỳ chuỗi nào không khớp với tên biến sẽ bị bỏ qua

ví dụ 1

đầu ra

Array
(
    [sachin] => 18426
    [ganguly] => 11363
    [virat] => 9779
)

ví dụ 2

đầu ra

Array
(
    [firstname] =>java
    [lastname] =>tpoint
    [location] =>noida
)

ví dụ 3

đầu ra

Array
(
    [KR] => KERELA
    [FL] => FLOOD
    [HL] => 600cr
)

Ví dụ 4

đầu ra

Array
(
    [firstname] =>sachin
    [lastname] =>tendulkar
    [age] => 45
)

mang một sự đào sâu ngầm về ngôn ngữ. Người hỏi bắt đầu với giả định rằng PHP tệ. Tôi sẽ không đi sâu vào lý do tại sao chúng sai, vì bạn chỉ cần đọc câu trả lời cho câu hỏi trong liên kết. Nhưng nó khiến tôi nghĩ rằng PHP rất lớn. Rất nhiều trang web được mã hóa bằng PHP

Tất cả chúng ta đều biết việc mắc kẹt trong một cách làm việc dễ dàng như thế nào. Tuy nhiên, đối với tôi, làm đi làm lại một việc theo cùng một cách có tác dụng khó chịu là khiến công việc giống như. tốt, bạn biết. công việc. Thật là nhàm chán. Tôi là nhà phát triển toàn diện người dành nhiều thời gian để viết bằng PHP as I do writing HTML or JavaScript or SASS or LESS or whatever anyone is doing these days. And I realized that when I’ve been switching between languages, tôi cũng đã bật công tắc trong đầu và chỉ cho rằng PHP không thể . JS với JavaSscript. Vì vậy, tôi quyết định bắt đầu tìm hiểu xem liệu có cách nào mới, tốt hơn hoặc chỉ khác để làm mọi thứ trong PHP mà có lẽ tôi chưa nghĩ tới. Hđây là rất nhiều điều mà tôi đã học được, now that I know them, I just can’t live without.

Đây là những gì tôi sẽ trình bày

  • thu gọn & giải nén
  • Danh sách
  • Chức năng ẩn danh và Đóng cửa
  • Khai báo điều kiện của bạn dưới dạng biến

Trước khi tôi bắt đầu, hãy để me hỏi bạn một câu sau - Tại sao nhà phát triển nghỉ việc? . Hiểu rồi?. Ok ok tôi nhóc tôi nhóc. tiếp tục.

Rút gọn và giải nén

Có thể bạn đã biết về hàm `implode` và `explode`. Các hàm PHP này hoạt động trên chuỗi và mảng và có thể được coi là đối lập của nhau. `implode` lấy một mảng được lập chỉ mục bằng số và chuyển đổi nó thành một chuỗi được phân tách bằng keo mà bạn chuyển nó. Nó giống như, ồ bạn có 100 viên gạch, hãy đập chúng cùng với bê tông này (đó có phải là cách những bức tường gạch được tạo ra không? Tôi không biết). `explode` thì ngược lại. Phải mất một chuỗi và kablooey. Bây giờ nó là một mảng dựa trên dấu phân cách mà bạn chuyển nó (deglue-er có phải là một từ không? Nếu không, nó phải như vậy).

Nếu bạn đã quen thuộc với các hàm này, bạn có thể rất vui khi biết rằng PHP có nhiều hàm hoạt động trên các biến và mảng kết hợp trong . `compact` và `extract` thực hiện việc này. `extract` lấy một mảng kết hợp và trích xuất tất cả các khóa dưới dạng biến vào phạm vi hiện tại và xác định chúng theo giá trị của chúng trong mảng. Thí dụ.


$assoc = [
 
'name' => 'Josh',
 
'age' => '30',
 
'height' => "5' 8\"",
 
'weight' => 'noneya beeswax'
];

giải nén($assoc);


echo $name;
// kết xuất Josh
echo $age;
// hiển thị 30
echo $height;
// hiển thị 5' 8"
echo $weight;
// hiển thị 'noneya sáp ong'

Tôi thấy phương pháp này hữu ích để truyền dữ liệu đến một PHP mẫu hoặc để truyền dữ liệu vào một . Nếu không, bạn có thể rơi vào tình trạng choáng ngợp if(isset($blah . //then do something } habit and that kinda defeats the usefulness of `extract`.

Ồ và về điều đó if(isset($ . Điểm mới trong  note: New in PHP7 là “toán tử kết hợp null. ” Vì vậy, bây giờ bạn có thể làm những việc như if ($sayHI ?? true) { echo "Hey there!"; }. Ở đây nếu `$sayHi` là một biến tồn tại và không phải là null, thì nó sẽ sử dụng giá trị của biến đó. But nếu không, nó sẽ mặc định là true. Nhưng tôi lạc đề.

`compact` thì ngược lại. Giả sử bạn có rất nhiều biến trôi nổi xung quanh phạm vi mà bạn đang làm việc, bạn muốn lấy từng biến và tạo một mảng kết hợp để sau đó chuyển mảng đó vào tập lệnh hoặc hàm. Bạn có thể làm theo cách này.

$name = 'Xaq';
$ tuổi =
'Có lẽ trẻ hơn Josh';
$trọng lượng =
'Noneya';
$chiều cao =
'Definitely taller than Josh';

$assoc = [
   
'name' => $name,
   
'age' => $age,
   
'weight' => $weight,
   
'height' => $height
];

Ngay cả khi là một lập trình viên khiến ngón tay tôi bị đau và cảm thấy lặp đi lặp lại một cách khó chịu. Sẽ không hay sao nếu chỉ thả từng biến vào một mảng và để nó tự động được xác định trong mảng theo tên biến của nó? . Bạn có thể


// với các vars được xác định ở trên của chúng tôi
$assoc = compact('tên','tuổi','weight','height');

bùng nổ. Xong. Và đó không phải là dễ dàng?. Điều này tạo ra một mảng kết hợp với mỗi tên biến của chúng tôi là khóa và giá trị của chúng là giá trị của khóa mảng

Danh sách

Ok, và bây giờ là phần cuối cùng về toán tử mảng này, hãy để tôi giới thiệu với bạn toán tử yêu thích mới của tôi. `list`. `list` là toán tử nhận bất kỳ số lượng biến nào. Không giống như các hàm và toán tử khác, `list` hoạt động ở phía bên trái của phép gán và bạn đặt nó bằng một mảng được lập chỉ mục bằng số mà về cơ bản bạn muốn trích xuất các biến cho. Vì vậy, đây là một ví dụ.


list($age, $height, $name) = ["30", <"5'8\"", "Josh"];

echo $age;
// hiển thị 30
echo $height;
// hiển thị 5'8"
echo $name;
// kết xuất Josh

Nếu bạn đang thắc mắc tại sao tôi nghĩ điều này thật tuyệt vời, thì đó là bởi vì đây là cách tôi đã làm điều này trong 6 năm qua


$joshAttributes = ["30", "5'8\"", "Josh"];
$age = $joshAttribut[
0];
$height = $joshAttribut[
1];
$name = $joshAttribut[
2];

Như bạn có thể thấy, việc cô đọng 4 dòng mã thành một dòng sẽ ít tốn công sức hơn. Và bạn biết làm thế nào trò chơi tôi dành cho công việc ít hơn

Chức năng ẩn danh và đóng cửa

Được rồi, hiểu chưa? . Nếu bạn đã từng làm việc với JavaScript thì có thể bạn đã quen với các khái niệm hàm ẩn danh và closures. Đây là một ví dụ ngắn gọn về JavaScript.

// mã JS

// hàm ẩn danh được lưu trữ trong một biến
var myFunction = function () {
   
console< . log(.log('Xin chào người đó');
}


// hàm được truyền trực tiếp vào hàm khác (hay còn gọi là đóng)
chức năng chức năng khác(tuổi, tênCB) {
   
var ageDec = nameCB(age);
   
console.log(ageDec);
}

chức năng khác (
30, hàm (a) { return 'Josh is ' + a + ' years old'; });
// bảng điều khiển này ghi 'Josh 30 tuổi';

Nếu bạn không quen với việc đóng cửa, tôi không khuyên bạn nên bắt đầu với bài viết trên wikipedia < . Nếu bạn giống tôi, điều này sẽ dẫn bạn đến con đường đen tối của những thứ như 'từ vựng' và 'công dân hạng nhất' trên Google. Thay vào đó, tôi sẽ xem xét một số ví dụ thực tế như câu trả lời choon them. If you are like me, this will lead you down a dark path of googling things like 'lexical' and 'first-class citizen'. Rather, I would look at a few practical examples like the responses to this câu hỏi về Stack Overflow này, "What is a . .

Kể từ PHP5. 3, PHP thực sự cũng đã hỗ trợ bao đóng.  Có thể bạn đang nghĩ, "ahhhhhh. ok, nhưng tại sao?" Vâng, hãy để tôi nói cho bạn biết.  Đầu tiên, việc sử dụng bao đóng sẽ ngăn mọi xung đột không gian tên ngẫu nhiên. Điều này có nghĩa là bạn có thể có một hàm có tên `myFunction` trong phạm vi cha hoặc phạm vi toàn cầu và một biến có tên `$myFunction` được gán một hàm trong bất kỳ phạm vi con nào của bạn. Thứ hai, bao đóng là một cách tuyệt vời để lưu trữ các phần logic mà bạn biết rằng bạn cần phải linh hoạt tùy thuộc vào các điều kiện mà chúng được gọi. (Đây là một tài nguyên tuyệt vời mà tôi tình cờ tìm thấy khi nghiên cứu bài đăng này. )

Ok, vậy giả sử bạn có các chức năng sau



function myAwesomeFunction ($title) {
   
return function ($name) use ($title) {
tên $. =
' the ' . $title;
echoIsAwesome($name);
};
}


function echoIsAwesome ($string) {
   
echo $string . ' thật tuyệt vời. ;
}

Trong ví dụ này, chúng ta có một hàm `myAwesomeFunction` trả về một hàm. Chúng tôi coi hàm được trả về là hàm ẩn danh vì hàm này không chiếm bất kỳ không gian tên nào của riêng nó. Nó là một bao đóng bởi vì nó được xác định trong phạm vi chức năng của `myAwesomeFunction` và do đó có thể truy cập các biến có sẵn cho phạm vi đó (ở đây nó sử dụng biến $title)

Chúng tôi cũng có một chức năng gọi là `echoIsAwesome` chỉ cần lấy một chuỗi và nối thêm ` là siêu tuyệt vời. `  và in nó ra

Vì vậy, giả sử rằng bạn đang xây dựng một trang liệt kê các nhân viên của một tổ chức và những nhân viên này được sắp xếp theo chức danh. Trên trang này, bạn có thể muốn tuyên bố sự tuyệt vời của từng nhân viên. Sử dụng các chức năng trên, bạn có thể làm điều gì đó như sau

$orgChart = [
   
'Người đồng sáng lập' => [ 'Allyson', 'Jared' ],
   
'Project Manager' => [ 'Danielle', 'Kristin' ],
   
'Digital Strategist' => [ 'Justyn' ],
   
'Web Developer' => [ 'Xaq', 'Casey', 'Josh' ]
];


// bây giờ hãy lặp qua các tiêu đề và nhân viên $orgChart và in từng nhân viên
foreach ($orgChart as $title => $employees) {
$printFunc = myAwesomeFunction($title);
   
foreach ($employees as $name) {
$printFunc($name);
}
}

Điều này sẽ xuất ra như sau

Đồng sáng lập Allyson siêu tuyệt vời
Người đồng sáng lập Jared siêu tuyệt vời
Danielle Giám đốc dự án là siêu tuyệt vời
Kristin Giám đốc dự án siêu tuyệt vời
Nhà chiến lược kỹ thuật số Justyn siêu tuyệt vời
Xaq Nhà phát triển web siêu tuyệt vời
Casey Nhà phát triển web siêu tuyệt vời
Josh the Web Developer siêu tuyệt vời

Đây rõ ràng là một ví dụ cực kỳ đơn giản, thậm chí có thể không yêu cầu đóng nhưng chỉ cần tưởng tượng rằng bạn muốn thực hiện một số phép nối chuỗi phức tạp hơn dài 10 dòng và trên đó viết lệnh gọi db để xác minh rằng tên của nhân viên . Đối với các nhà phát triển khác, những người có thể ghé qua để sửa lỗi nhỏ trong khi bạn đang bận rộn với các dự án khác, việc đọc vòng lặp foreach 6 dòng với các tên biến giúp mô tả logic sẽ dễ đọc hơn vòng lặp foreach 27 dòng với nhiều từ nối và . Hoặc có lẽ bạn đang sử dụng chức năng này trên nhiều trang vì nhiều lý do và sau đó bạn quyết định rằng bạn muốn thay đổi cách nối đó thành một thứ khác và làm cho nó tự động thấm vào tất cả những nơi bạn đang sao chép hành vi này trên toàn bộ trang web. Làm theo cách này có nghĩa là bạn có một vị trí được đóng gói tốt để bạn có thể thay đổi mã, thay vì tìm kiếm và tìm tất cả các vòng lặp cho từng vòng lặp mà bạn đã viết trên khắp trang web

Khai báo điều kiện của bạn dưới dạng biến

Cuối cùng, thủ thuật cuối cùng mà tôi muốn thảo luận là một thủ thuật mà tôi cho rằng chỉ nhằm mục đích dễ đọc nhưng sau đó tôi thấy nó cực kỳ hữu ích cho hiệu suất và cấu trúc. 'Khai báo điều kiện của bạn dưới dạng biến'

Hãy để tôi nói rằng Chiến dịch Rad xây dựng rất nhiều trang web Drupal và mọi người trong nhóm ở đây chắc chắn là những chuyên gia về Drupal. Khi tôi bắt đầu tại Rad Campaign, tôi chỉ biết hai điều về Drupal. 1) rất nhiều trang web sử dụng Drupal làm khung mà họ xây dựng CMS trên đó và 2) tất cả những người bạn là nhà phát triển của tôi sẽ hít một hơi thật sâu bất cứ khi nào tôi hỏi họ về điều đó. Bây giờ, sau khi làm việc tại Rad hơn một năm, tôi nhận ra rằng dù Drupal có thể phức tạp và khó hiểu đến mức nào, ẩn sâu bên trong là cả một thế giới phong phú của những ý tưởng tuyệt vời về mã. Tôi biết được ý tưởng cuối cùng này khi đang đọc  về điều kiện và độ dài dòng. Cụ thể, Drupal Coding Standards nói điều này.

"Các điều kiện cấu trúc điều khiển cũng KHÔNG nên cố gắng giành giải thưởng Điều kiện nhỏ gọn nhất với ít dòng mã nhất™. [ví dụ mã bị bỏ qua]. Thay vào đó, nên thực hành tách ra và chuẩn bị các điều kiện riêng biệt, điều này cũng cho phép ghi lại các lý do cơ bản của các điều kiện. [ví dụ mã bị bỏ qua]"

Điều này có nghĩa là, đừng làm điều này



if (($rad == 'tuyệt vời' && $rad == 'awesome websites') || ($otherWebAgencies == 'ổn thôi' && $rad == 'tốt hơn') || ($josh == 'tuyệt vời' && $josh == 'mã tốt')) {
        
echo 'hire rad!';
}

else {
        
echo 'ngừng sử dụng Internet tất cả;
}

Ooofff, câu lệnh if đó là lenggggtttthhhhhy. Chúng tôi có thể làm sạch nó bằng cách xác định các điều kiện của chúng tôi và làm như vậy làm cho mã dễ đọc hơn

$radIsAwesome = ($rad == 'tuyệt vời' && $rad == 'tuyệt vời);

$otherAgenciesAreNotAsAwesome = ($otherWebAgencies == 'không sao đâu' && $rad == ');

$joshIs Ổn = ($josh == 'tuyệt' && $josh == ' khá);

if ($radIsAwesome. $otherAgenciesAreNotAsAwesome. $joshIsAll) {
        
echo 'hire rad. ';
}

else {
        
echo 'ngừng sử dụng Internet tất cả;
}

Ở đây, ngay cả khi không có bình luận (thật xấu hổ cho tôi), mã này dễ đọc hơn rất nhiều. Chúng ta có thể thấy rõ ràng từ cách đặt tên của các biến mà câu lệnh if đang đánh giá mà không cần phải làm việc quá nhiều để phân tích nó một cách trực quan. Và đối với những người sửa mã trong tương lai, đó là một điểm cộng. Những điều nhỏ nhặt này cũng có hậu quả trong thế giới thực. Bất kỳ điều nhỏ nào bạn có thể làm để mã của mình mạch lạc hơn sẽ giúp dễ sửa lỗi hơn, điều này sẽ tiết kiệm thời gian và tiền bạc cho người khác

Phần kết luận

Như tôi đã nói trước đây, PHP rất lớn. Có một câu nói sáo rỗng phổ biến trong lập trình rằng có nhiều cách để lột da một con mèo (không có con vật nào bị hại trong quá trình sản xuất mã của chúng tôi). Có rất nhiều cách để làm mọi việc và PHP thì rộng lớn đến mức chắc chắn có những mẹo không được trình bày ở đây và thậm chí tôi có thể không biết. Nếu bạn biết bất kỳ điều gì chắc chắn sẽ có trong danh sách của chúng tôi, chúng tôi rất muốn nghe ý kiến ​​​​của bạn. Gửi cho chúng tôi một ghi chú tại

Mục đích của hàm phát nổ () giải nén () và nén () PHP là gì?

Hàm compact() là một hàm có sẵn trong PHP và được sử dụng để tạo một mảng sử dụng các biến . Hàm này ngược lại với hàm extract(). Nó tạo ra một mảng kết hợp có khóa là tên biến và giá trị tương ứng của chúng là giá trị mảng.

Làm cách nào để trích xuất nhiều giá trị từ một mảng trong PHP?

Cắt một mảng . $subset = array_slice (mảng, độ lệch, độ dài); . use the array_slice( ) function: $subset = array_slice (array , offset , length ); The array_slice( ) function returns a new array consisting of a consecutive series of values from the original array.

Làm cách nào để trích xuất mảng nhiều chiều trong PHP?

Truy xuất giá trị. Chúng ta có thể lấy giá trị của mảng nhiều chiều bằng phương pháp sau. .
Sử dụng phím. Chúng ta có thể sử dụng khóa của mảng kết hợp để lấy trực tiếp giá trị dữ liệu. .
Sử dụng vòng lặp foreach. Chúng ta có thể sử dụng vòng lặp foreach để truy xuất giá trị của từng khóa được liên kết bên trong mảng kết hợp đa chiều

Làm cách nào để giải nén mảng trong PHP?

Một mảng có thể được giải nén bằng một mảng khác nếu biểu thức mảng có tiền tố là toán tử trải rộng . Điều này thực sự dẫn đến một array_merge của tất cả các mảng trong biểu thức. $array_1 = ['foo', 'bar']; . $mảng_1,.