পিএইচপি ব্যবহার করে একটি অ্যারে খালি কিনা তা কীভাবে পরীক্ষা করবেন?


470

playersহয় ফাঁকা বা কমা দ্বারা পৃথক তালিকা (বা একক মান) হবে। খালি থাকলে তা যাচাই করার সহজ উপায় কী? আমি ধরে নিচ্ছি $gameresultঅ্যারে আনার সাথে সাথে আমি তা করতে পারি $gamerow? এই ক্ষেত্রে এটি $playerlistখালি থাকলে বিস্ফোরকটি এড়ানো সম্ভবত আরও দক্ষ হবে তবে তর্ক করার জন্য, অ্যারেটিও খালি রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করব?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

2
গণনা (), আকার (), খালি () ব্যবহার করবেন না। খালি অ্যারে প্রত্যাবর্তন মিথ্যা: যদি ($ অ্যারে) {
সীমাবদ্ধতা

উত্তর:


773

আপনার যদি অ্যারেতে কোনও উপাদান রয়েছে কিনা তা খতিয়ে দেখার দরকার আছে

if (empty($playerlist)) {
     // list is empty.
}

আপনার যদি পরীক্ষার আগে খালি মানগুলি পরিষ্কার করার প্রয়োজন হয় (সাধারণত explodeঅদ্ভুত স্ট্রিংগুলি প্রতিরোধ করার জন্য করা হয় ):

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}

2
আপনার শুধু খালি ব্যবহার করা উচিত নয়? বৃহত অ্যারেগুলির জন্য গণনাটি বেশি সময় নিতে পারে।
ড্যান ম্যাকগ্রা

1
সম্পন্ন. আপনাকে এ্যাসেট এবং স্টাফ ব্যবহার করতে হবে না এর জন্যও আমি এটিকে পরিবর্তন করেছি।
টাইলার কার্টার

5
তার কোড উদাহরণ দেওয়া, ভেরিয়েবল সেট করা হবে যাতে আপনার ব্যবহারের প্রয়োজন হবে না empty()
কবি

4
সাবধান! if(!isset($emptyarray))হয় falseকিন্তু if(empty($emptyarray))ফিরে true। এটি আমাকে কেবল পেরেক করেছে
কলব ক্যানিয়ন

161

পিএইচপি-তে একটি খালি অ্যারে মিথ্যা, সুতরাং empty()অন্যরা যেমন পরামর্শ দিয়েছে তেমন আপনাকে ব্যবহার করার দরকার নেই ।

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

পিএইচপি এর empty()নির্ধারণ করে যদি একটি পরিবর্তনশীল বিদ্যমান নয় বা falsey মান (মত array(), 0, null, false, ইত্যাদি)।

বেশিরভাগ ক্ষেত্রে আপনি কেবল যাচাই করতে চান !$emptyVarempty($emptyVar)যদি ভেরিয়েবলটি সেট না করা থাকে এবং আপনি একটি ট্রিগার করতে না চান তবে ব্যবহার করুন E_NOTICE; আইএমও এটি একটি খারাপ ধারণা।


2
আমি আশা করি এটি কোনও মানদণ্ডে পরিবর্তিত হবে না ... এটি বেদনাদায়ক হবে
ডেভিড কনস্টানটাইন

79

কিছু শালীন উত্তর, তবে কেবল ভেবেছিলাম যে পিএইচপি যখন অ্যারেটি খালি রয়েছে তা নির্ধারণ করে আমি আরও স্পষ্ট করে ব্যাখ্যা করার জন্য কিছুটা প্রসারিত করব।


প্রধান নোট:

একটি কী (বা কী) সহ একটি অ্যারে খালি নয় হিসাবে নির্ধারিত হবে পিএইচপি দ্বারা ।

অ্যারে মানগুলির অস্তিত্বের জন্য কীগুলি থাকা প্রয়োজন, অ্যারেতে মান থাকা বা না থাকা তা খালি কিনা তা নির্ধারণ করে না, কেবল কোনও কী না থাকলে (এবং অতএব কোনও মান নেই)।

সুতরাং অ্যারের সাথে চেক করা empty()আপনার মানগুলি আছে কি না তা কেবল আপনাকে জানায় না, অ্যারেটি খালি আছে কিনা তা আপনাকে জানায় এবং কীগুলি অ্যারের অংশ are


সুতরাং কোন চেকিং পদ্ধতিটি ব্যবহার করবেন তা সিদ্ধান্ত নেওয়ার আগে আপনি কীভাবে আপনার অ্যারে উত্পাদন করছেন তা বিবেচনা করুন।
যেমন একটি অ্যারে হবে কী যখন একজন ব্যবহারকারী আপনার HTML ফর্ম জমা দিয়েছে যখন প্রতিটি ফর্ম ক্ষেত্র একটি অ্যারের নাম (অর্থাত হয়েছে আছে name="array[]")। প্রতিটি ক্ষেত্রের জন্য
একটি খালি খালি অ্যারে উত্পাদন করা হবে কারণ প্রতিটি ফর্ম ক্ষেত্রের অ্যারের জন্য অটো বর্ধিত মূল মান থাকবে।

উদাহরণস্বরূপ এই অ্যারেগুলি নিন:

/* Assigning some arrays */

// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");

// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";

// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';

আপনি যদি উপরের অ্যারেগুলির জন্য অ্যারে কী এবং মানগুলি প্রতিধ্বনিত করেন তবে আপনি নিম্নলিখিতটি পান:


শুরুর এক: [ইউজারকেএএ] => [ইউজারভ্যালুএ]
[ইউজারকিবি] => [ইউজারভ্যালিউবি]

দু'বার প্রবেশ করুন:
[0] => [ইউজারভ্যালিউ01]
[1] => [ইউজারভ্যালু02]

তিনটি প্রবেশ করুন:
[0] => []
[1] => []

এবং উপরের অ্যারেগুলি পরীক্ষা করে empty()নিম্নলিখিত ফলাফলগুলি প্রদান করে:

প্রথম এক:
$ অ্যারেওন খালি নেই


দু'বার শুরুর দিকে : T অ্যারে টু খালি নেই

তিনটে প্রবেশ করুন:
$ অ্যারেথ্রি খালি নেই

আপনি যখন অ্যারে নির্ধারণ করবেন তখন একটি অ্যারে সর্বদা খালি থাকবে তবে এর পরে এটি ব্যবহার করবেন না যেমন:

$ArrayFour = array();

এটি খালি হবে, যেমন পিএইচপি উপরেরটি ব্যবহার করার সময় সত্য ফিরে আসবে empty()

সুতরাং যদি আপনার অ্যারেতে কী থাকে - উদাহরণস্বরূপ কোনও ফর্মের ইনপুট নামগুলি বা যদি আপনি ম্যানুয়ালি এ্যাসাইন করেন (যেমন কী হিসাবে ডাটাবেস কলামের নামগুলির সাথে একটি অ্যারে তৈরি করুন তবে ডাটাবেস থেকে কোনও মান / ডেটা নেই), তবে অ্যারেটি হবে না empty()

এই ক্ষেত্রে, আপনি প্রতিটি কীটির কোনও মান আছে কিনা তা পরীক্ষা করে, আপনি একটি অগ্রভাগে অ্যারে লুপ করতে পারেন। আপনার যদি যাইহোক অ্যারে দিয়ে চালানোর দরকার হয় তবে সম্ভবত কীগুলি পরীক্ষা করা বা ডেটা স্যানিটাইজিং করা দরকার এটি একটি ভাল পদ্ধতি।

তবে আপনার যদি কেবল "মূল্যবোধের উপস্থিতি থাকে" সত্য বা মিথ্যা প্রত্যাবর্তন করতে হয় তবে এটি সর্বোত্তম পদ্ধতি নয় । অ্যারেটির কোনও মান রয়েছে কিনা তা নির্ধারণ করার জন্য বিভিন্ন পদ্ধতি রয়েছে যখন এটি জানাগেছে যে এর কী থাকবে। কোনও ক্রিয়াকলাপ বা শ্রেণি সর্বোত্তম পন্থা হতে পারে তবে সর্বদা এটি আপনার পরিবেশ এবং সঠিক প্রয়োজনীয়তার উপর নির্ভর করে পাশাপাশি আপনি বর্তমানে অ্যারের সাথে কী করছেন (যদি কিছু হয়) তবে অন্যান্য বিষয়ের উপর নির্ভর করে।


অ্যারেটির মান আছে কিনা তা যাচাই করতে এখানে খুব কম কোড ব্যবহার করা হচ্ছে এমন একটি পদ্ধতি রয়েছে:

ব্যবহার array_filter():
অ্যারেতে প্রতিটি মানকে কলব্যাক ফাংশনে পাঠিয়ে দেয়। যদি কলব্যাক ফাংশনটি সত্য হয়, অ্যারে থেকে বর্তমান মান ফলাফল অ্যারেতে ফিরে আসবে। অ্যারে কীগুলি সংরক্ষিত আছে।

$EmptyTestArray = array_filter($ArrayOne);

if (!empty($EmptyTestArray))
  {
    // do some tests on the values in $ArrayOne
  }
else
  {
    // Likely not to need an else, 
    // but could return message to user "you entered nothing" etc etc
  }

চলমান array_filter()সব তিনটি উদাহরণ অ্যারে তে (এই উত্তরে প্রথম কোড ব্লক তৈরি করা) নিম্নলিখিত মধ্যে ফলাফল:

প্রথম এক:
ray অ্যারেওন খালি নেই


দু'বার প্রবেশ করুন : $ অ্যারেটিও খালি নেই

তিনটি প্রবেশ করুন:
ray অ্যারেথ্রি খালি আছে

সুতরাং যখন কোনও মান নেই, কী আছে কিনা তা নয়, array_filter()একটি নতুন অ্যারে তৈরি করতে ব্যবহার করে এবং তারপরে নতুন অ্যারেটি খালি শো রয়েছে কিনা তা পরীক্ষা করে দেখুন মূল অ্যারেটিতে কোনও মান আছে কিনা।
এটি আদর্শ এবং কিছুটা অগোছালো নয়, তবে আপনার যদি খুব বড় অ্যারে থাকে এবং অন্য কোনও কারণে এটির মাধ্যমে লুপের প্রয়োজন না হয় তবে কোডের প্রয়োজনীয়তার ক্ষেত্রে এটি সবচেয়ে সহজ।


আমি ওভারহেডগুলি চেক করার ক্ষেত্রে অভিজ্ঞ নই, তবে কোনও মান খুঁজে পাওয়া যায় কিনা তা ব্যবহার array_filter()এবং foreachপরীক্ষার মধ্যে পার্থক্যগুলি জানা ভাল হবে ।

স্পষ্টতই বেঞ্চমার্কটি বিভিন্ন পরামিতিগুলিতে, ছোট এবং বড় অ্যারেগুলিতে এবং যখন মান থাকে এবং না হয় ইত্যাদি হতে হবে would


2
এটার জন্য অনেক ধন্যবাদ। এটি সত্যিই তথ্যবহুল ছিল এবং এটি ব্যবহার করে আমার সমস্যাটি সমাধান করতে সক্ষম হয়েছিলarray_filter()
ব্রায়ান পাওয়েল

খালি (অ্যারে ()) সর্বদা মিথ্যা হিসাবে প্রমাণিত হয়, সুতরাং গণনা যোগ করা (অ্যারে ()) == 0 সত্য প্রকাশ করবে
টিমজ

1
count(array())==0যখন কীগুলি থাকে এবং কোনও মান থাকে না তখন @mboullouz মিথ্যা হয়, সুতরাং এটি কেবলমাত্র মানগুলি পরীক্ষা করতে সহায়তা করে না। আপনার বক্তব্যটি সঠিক, তবে count(array())অ্যারে অবশ্যই খালি হওয়ায় আপনি একটি পরীক্ষা জোর করে নিচ্ছেন। অ্যারে কোন ফর্ম থেকে বা অন্য কোথা থেকে ফিরে এসেছে তা খালি (কী / মান) বা ঠিক মান আছে কি না তা জানতে আমাদের পরীক্ষা করা দরকার
জেমস

এই সমাধানটি এই ধরণের অ্যারেগুলির জন্য উপযুক্ত, উদাহরণস্বরূপ আপনি যখন কোনও ইনপুট ফাইলকে বৈধতা দিতে চান তখন এটি সহায়তা করে array_filter($_FILES["documento"]['name'])
Gendrith


12

আপনি যে ভেরিয়েবলটি পরীক্ষা করছেন তা প্রকৃতপক্ষে স্পষ্টভাবে একটি খালি অ্যারে কিনা তা আপনি যদি জানতে চান, আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}

11

আপনি যদি মিথ্যা বা খালি সারিগুলি বাদ দিতে চান (যেমন 0 => '') যেখানে ব্যবহার empty()ব্যর্থ হবে, আপনি চেষ্টা করতে পারেন:

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter(): যদি কোনও কলব্যাক সরবরাহ না করা হয় তবে FALSE এর সমান অ্যারের সমস্ত এন্ট্রি (বুলিয়ান রূপান্তরিত দেখুন) সরানো হবে।

আপনি যদি সমস্ত নাল, মিথ্যা এবং খালি স্ট্রিং ( '') মুছে ফেলতে চান তবে শূন্য মান ( 0) ছেড়ে যান , আপনি strlenকলব্যাক হিসাবে ব্যবহার করতে পারেন , যেমন:

$is_empty = array_filter($playerlist, 'strlen') == [];

এটি একটি ভিন্ন প্রশ্নের সঠিক উত্তর is অ্যারে ফিল্টার ব্যবহার করা ভুয়া মান সহ বিদ্যমান উপাদানগুলিকে ধ্বংস করবে। এটি ওপি যা চাইছে তা নয়।
মিকম্যাকুসা

8

কেন কেউ এই উত্তরটি বলেন নি:

$array = [];

if($array == []) {
    // array is empty
}

1
আপনার বক্তব্যটি সঠিক নয়। কেউ এই উত্তরটি বলেছিলেন - টিম ওগিলভি - এক বছর আগে। এর পরিবর্তে বর্গাকার ধনুর্বন্ধনী ব্যবহার করা array()একই জিনিস।
মিকম্যাকুসা

টুপির নিচে থাকা অবস্থায় এটি একই উত্তর ... প্রযুক্তিগতভাবে ically আমি পুরানো অ্যারে ফাংশনের পরিবর্তে বর্গাকার বন্ধনী ব্যবহার করেছি।
রব

7
is_array($detect) && empty($detect);

is_array


এগুলি অপ্রয়োজনীয় চেক। ওপি কল করছে explode()- এটি অ্যারে-টাইপের ডেটা ফেরত দেয়। চেক empty()করা একটি অনিবদ্ধ ফাংশন কল। হিসাবে 2012 সালে কবি দ্বারা বিবৃত, if($detect)যে সমস্ত প্রয়োজন হয়। এই সমাধানটি এই কাজের জন্য বা অন্যদের জন্য প্রয়োগ করা উচিত নয়। আপনি তর্ক করতে পারেন যে আপনি এই প্রশ্নের ক্ষেত্রের বাইরে পরিস্থিতিগুলি আবৃত করছেন, ঠিক আছে, empty()আফটার কল করার প্রয়োজন নেই is_array()কারণ যদি ভেরিয়েবলটি "সেট" না করে থাকে তবে is_array()"নোটিশ: অপরিবর্তিত ভেরিয়েবল" তৈরি করা হবে, যদি ওভারকিল হয় isset()তবে empty()কেবল ব্যবহার করুন কবির উত্তর।
মিকম্যাকুসা

6

আমি পোস্টের শেষে অন্তর্ভুক্ত বেঞ্চমার্ক চালিত। পদ্ধতিগুলির তুলনা করতে:

  • count($arr) == 0 : গণনা
  • empty($arr) : খালি
  • $arr == [] : কমপ
  • (bool) $arr : নিক্ষেপ

এবং নিম্নলিখিত ফলাফল পেয়েছি

Contents  \method |    count     |    empty     |     comp     |     cast     |
------------------|--------------|--------------|--------------|--------------|
            Empty |/* 1.213138 */|/* 1.070011 */|/* 1.628529 */|   1.051795   |
          Uniform |/* 1.206680 */|   1.047339   |/* 1.498836 */|/* 1.052737 */|
          Integer |/* 1.209668 */|/* 1.079858 */|/* 1.486134 */|   1.051138   |
           String |/* 1.242137 */|   1.049148   |/* 1.630259 */|/* 1.056610 */|
            Mixed |/* 1.229072 */|/* 1.068569 */|/* 1.473339 */|   1.064111   |
      Associative |/* 1.206311 */|   1.053642   |/* 1.480637 */|/* 1.137740 */|
------------------|--------------|--------------|--------------|--------------|
            Total |/* 7.307005 */|   6.368568   |/* 9.197733 */|/* 6.414131 */|

বুলিয়ান থেকে খালি এবং কাস্টিংয়ের মধ্যে পার্থক্য নগণ্য। আমি একাধিকবার এই পরীক্ষা চালিয়েছি এবং এগুলি মূলত সমতুল্য বলে মনে হয়। অ্যারেগুলির বিষয়বস্তুগুলি কোনও উল্লেখযোগ্য ভূমিকা রাখেনি বলে মনে হয়। দু'টি বিপরীত ফলাফল প্রকাশ করে তবে যৌক্তিক অবহেলা বেশিরভাগ সময় জয়ের পক্ষে কাস্টিংকে ধাক্কা দেওয়ার পক্ষে যথেষ্ট তাই আমি ব্যক্তিগতভাবে উভয় ক্ষেত্রেই সামর্থ্যের জন্য খালি পছন্দ করি prefer

#!/usr/bin/php
<?php

//    012345678
$nt = 90000000;

$arr0 = [];
$arr1 = [];
$arr2 = [];
$arr3 = [];
$arr4 = [];
$arr5 = [];

for ($i = 0; $i < 500000; $i++) {
    $arr1[] = 0;
    $arr2[] = $i;
    $arr3[] = md5($i);
    $arr4[] = $i % 2 ? $i : md5($i);
    $arr5[md5($i)] = $i;
}

$t00 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr0) == 0;
}
$t01 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr0);
}
$t02 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr0 == [];
}
$t03 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr0;
}
$t04 = microtime(true);

$t10 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr1) == 0;
}
$t11 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr1);
}
$t12 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr1 == [];
}
$t13 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr1;
}
$t14 = microtime(true);

/* ------------------------------ */

$t20 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr2) == 0;
}
$t21 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr2);
}
$t22 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr2 == [];
}
$t23 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr2;
}
$t24 = microtime(true);

/* ------------------------------ */

$t30 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr3) == 0;
}
$t31 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr3);
}
$t32 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr3 == [];
}
$t33 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr3;
}
$t34 = microtime(true);

/* ------------------------------ */

$t40 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr4) == 0;
}
$t41 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr4);
}
$t42 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr4 == [];
}
$t43 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr4;
}
$t44 = microtime(true);

/* ----------------------------------- */

$t50 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr5) == 0;
}
$t51 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr5);
}
$t52 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr5 == [];
}
$t53 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr5;
}
$t54 = microtime(true);

/* ----------------------------------- */

$t60 = $t00 + $t10 + $t20 + $t30 + $t40 + $t50;
$t61 = $t01 + $t11 + $t21 + $t31 + $t41 + $t51;
$t62 = $t02 + $t12 + $t22 + $t32 + $t42 + $t52;
$t63 = $t03 + $t13 + $t23 + $t33 + $t43 + $t53;
$t64 = $t04 + $t14 + $t24 + $t34 + $t44 + $t54;

/* ----------------------------------- */

$ts0[1] = number_format(round($t01 - $t00, 6), 6);
$ts0[2] = number_format(round($t02 - $t01, 6), 6);
$ts0[3] = number_format(round($t03 - $t02, 6), 6);
$ts0[4] = number_format(round($t04 - $t03, 6), 6);

$min_idx = array_keys($ts0, min($ts0))[0];
foreach ($ts0 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts0[$idx] = "   $val   ";
    } else {
        $ts0[$idx] = "/* $val */";
    }

}

$ts1[1] = number_format(round($t11 - $t10, 6), 6);
$ts1[2] = number_format(round($t12 - $t11, 6), 6);
$ts1[3] = number_format(round($t13 - $t12, 6), 6);
$ts1[4] = number_format(round($t14 - $t13, 6), 6);

$min_idx = array_keys($ts1, min($ts1))[0];
foreach ($ts1 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts1[$idx] = "   $val   ";
    } else {
        $ts1[$idx] = "/* $val */";
    }

}

$ts2[1] = number_format(round($t21 - $t20, 6), 6);
$ts2[2] = number_format(round($t22 - $t21, 6), 6);
$ts2[3] = number_format(round($t23 - $t22, 6), 6);
$ts2[4] = number_format(round($t24 - $t23, 6), 6);

$min_idx = array_keys($ts2, min($ts2))[0];
foreach ($ts2 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts2[$idx] = "   $val   ";
    } else {
        $ts2[$idx] = "/* $val */";
    }

}

$ts3[1] = number_format(round($t31 - $t30, 6), 6);
$ts3[2] = number_format(round($t32 - $t31, 6), 6);
$ts3[3] = number_format(round($t33 - $t32, 6), 6);
$ts3[4] = number_format(round($t34 - $t33, 6), 6);

$min_idx = array_keys($ts3, min($ts3))[0];
foreach ($ts3 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts3[$idx] = "   $val   ";
    } else {
        $ts3[$idx] = "/* $val */";
    }

}

$ts4[1] = number_format(round($t41 - $t40, 6), 6);
$ts4[2] = number_format(round($t42 - $t41, 6), 6);
$ts4[3] = number_format(round($t43 - $t42, 6), 6);
$ts4[4] = number_format(round($t44 - $t43, 6), 6);

$min_idx = array_keys($ts4, min($ts4))[0];
foreach ($ts4 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts4[$idx] = "   $val   ";
    } else {
        $ts4[$idx] = "/* $val */";
    }

}

$ts5[1] = number_format(round($t51 - $t50, 6), 6);
$ts5[2] = number_format(round($t52 - $t51, 6), 6);
$ts5[3] = number_format(round($t53 - $t52, 6), 6);
$ts5[4] = number_format(round($t54 - $t53, 6), 6);

$min_idx = array_keys($ts5, min($ts5))[0];
foreach ($ts5 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts5[$idx] = "   $val   ";
    } else {
        $ts5[$idx] = "/* $val */";
    }

}

$ts6[1] = number_format(round($t61 - $t60, 6), 6);
$ts6[2] = number_format(round($t62 - $t61, 6), 6);
$ts6[3] = number_format(round($t63 - $t62, 6), 6);
$ts6[4] = number_format(round($t64 - $t63, 6), 6);

$min_idx = array_keys($ts6, min($ts6))[0];
foreach ($ts6 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts6[$idx] = "   $val   ";
    } else {
        $ts6[$idx] = "/* $val */";
    }

}

echo "             |    count     |    empty     |     comp     |     cast     |\n";
echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Empty |";
echo $ts0[1] . '|';
echo $ts0[2] . '|';
echo $ts0[3] . '|';
echo $ts0[4] . "|\n";

echo "     Uniform |";
echo $ts1[1] . '|';
echo $ts1[2] . '|';
echo $ts1[3] . '|';
echo $ts1[4] . "|\n";

echo "     Integer |";
echo $ts2[1] . '|';
echo $ts2[2] . '|';
echo $ts2[3] . '|';
echo $ts2[4] . "|\n";

echo "      String |";
echo $ts3[1] . '|';
echo $ts3[2] . '|';
echo $ts3[3] . '|';
echo $ts3[4] . "|\n";

echo "       Mixed |";
echo $ts4[1] . '|';
echo $ts4[2] . '|';
echo $ts4[3] . '|';
echo $ts4[4] . "|\n";

echo " Associative |";
echo $ts5[1] . '|';
echo $ts5[2] . '|';
echo $ts5[3] . '|';
echo $ts5[4] . "|\n";

echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Total |";
echo $ts6[1] . '|';
echo $ts6[2] . '|';
echo $ts6[3] . '|';
echo $ts6[4] . "|\n";

গুড বেঞ্চমার্ক, কিন্তু আপনি ভুলে গেছি sizeofযা উপনাম না [?] empty... stackoverflow.com/a/51986794/1429432
Yousha Aleayoub

5

আপনি যদি অ্যারে সামগ্রীটি ব্যবহার করতে পারেন তবে তা পরীক্ষা করতে পারেন:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}

এখানে দেখুন: http://codepad.org/EORE4k7v


২০১২-তে কোবির দেখানো অনুসারে, ঘোষিত অ্যারে খালি কিনা তা পরীক্ষা করার জন্য কোনও ফাংশন কল করা অপ্রয়োজনীয়।
মিকম্যাকুসা

5

আমার মতে একটি সূচকযুক্ত অ্যারের সহজতম উপায়টি সহজভাবে হবে:

    if ($array) {
      //Array is not empty...  
    }

অ্যারেতে একটি 'if' শর্তটি সত্য হিসাবে মূল্যায়ন করবে যদি অ্যারেটি ফাঁকা এবং অ্যারেটি ফাঁকা না থাকে তবে মিথ্যা । এটি এসোসিয়েটিভ অ্যারেগুলিতে প্রযোজ্য নয়


কোবি কার্যকরভাবে এই কৌশলটি ২০১২ সালে জানিয়েছিল His তার উত্তরটিতে বর্তমানে ১৩৩ টি আপত্তি রয়েছে।
মিকম্যাকুসা

এটি মতামতের বিষয় হিসাবে "সরলতম" নয় - এটি সহজতম কারণ কোনও সংশ্লেষ নেই যা আরও সংক্ষিপ্ত হতে পারে এবং এর কোনও কার্য-কল ওভারহেড নেই। ইনসেক্সটেটিভ কীগুলি বনাম এসোসিয়েটিভ কীগুলির সাথে কোনও অ্যারে অ্যাক্সেস করার জন্য নিখুঁতভাবে কোনও পার্থক্য নেই। এই উত্তরটি বিভ্রান্তকারী গবেষকরা। এই উত্তরটি রিডানড্যান্ট , তারপরে ইনকোরেক্ট3v4l.org/DSLha
মিকম্যাকুসা

3

আমি এই কোডটি ব্যবহার করি

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array is Empty";
}
else
{
    echo "Array is not Empty";
}

তবে মনে রাখবেন যে অ্যারেতে যদি বিপুল সংখ্যক কী থাকে তবে এই কোডটি অন্য উত্তরগুলির তুলনায় এগুলি গণনা করতে অনেক সময় ব্যয় করবে।


২০১২-তে কোবির দেখানো অনুসারে, ঘোষিত অ্যারে খালি কিনা তা পরীক্ষা করার জন্য কোনও ফাংশন কল করা অপ্রয়োজনীয়।
মিকম্যাকুসা

3

আপনি ব্যবহার করতে পারেন array_filter()যা সব পরিস্থিতিতে দুর্দান্ত কাজ করে:

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}

1
এই উত্তরটি অপ্রয়োজনীয় চেক নিয়োগ করে। প্রথমত, ওপি শূন্যতা পরীক্ষা করার আগে অ্যারে থেকে কোনও মিথ্যা মানগুলি ফিল্টার করতে আগ্রহী নয় - তাই আপনি পোস্ট করা প্রশ্ন থেকে সরে এসেছেন। দ্বিতীয়ত, ২০১২-তে কোবির দেখানো অনুসারে, ঘোষিত অ্যারে খালি কিনা তা যাচাই করার জন্য কোনও ফাংশন কল করা অপ্রয়োজনীয়।
মিকম্যাকুসা

2
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}

2

আমি মনে করি অ্যারেটি খালি আছে কিনা তা নির্ধারণ করার সর্বোত্তম উপায়টি এই জাতীয় গণনা () ব্যবহার করা নয়:

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}

count()কল মুছে ফেলা হতে পারে সম্পূর্ণরূপে - ক্ষুদ্রাকার এর উত্তর দেখুন।
মিকম্যাকুসা

2

সর্বাধিক উপযুক্ত সিদ্ধান্ত গ্রহণের জন্য আপনার ডেটার গুণমান এবং কোন প্রক্রিয়াগুলি অনুসরণ করা উচিত তা জেনে রাখা দরকার।

  1. আপনি যদি এই সারিটিকে অযোগ্য / উপেক্ষা / মুছে ফেলতে চলেছেন তবে ফিল্টারেশনের প্রথম দিকের পয়েন্টটি মাইএসকিএল কোয়েরিতে থাকা উচিত।

    • WHERE players IS NOT NULL
    • WHERE players != ''
    • WHERE COALESCE(players, '') != ''
    • WHERE players IS NOT NULL AND players != ''
    • ... এটি আপনার স্টোরের ডেটাগুলির উপর নির্ভর করে এবং অন্যান্য উপায় থাকবে, আমি এখানেই থামব।
  2. আপনি যদি ফলাফলটি সেটটিতে কলামটি উপস্থিত থাকেন কিনা তা যদি 100% নিশ্চিত না হন তবে আপনার কলামটি ঘোষিত হয়েছে কিনা তা পরীক্ষা করা উচিত। এর অর্থ কল করা array_key_exists(), isset()বা empty()কলামে। আমি এখানে পার্থক্যগুলি বর্ণনা করতে বিরক্ত করব না (সেই ভাঙ্গনের জন্য অন্যান্য এসও পৃষ্ঠা রয়েছে, এখানে একটি সূচনা: 1 , 2 , 3 )। এটি বলেছে, যদি আপনি ফলাফলের সেটটি সম্পূর্ণ নিয়ন্ত্রণে না রাখেন তবে সম্ভবত আপনার অতিরিক্ত প্রয়োগের "নমনীয়তা" রয়েছে এবং সম্ভাব্য অস্তিত্বহীন কলামের ডেটা অ্যাক্সেস করার সমস্যা যদি উপযুক্ত হয় তবে তা পুনর্বিবেচনা করা উচিত। কার্যকরভাবে, আমি বলছি যে আপনার কখনই কোনও কলাম ঘোষিত হয়েছে কিনা তা খতিয়ে দেখার দরকার নেই - empty()এই কাজের জন্য আপনার কখনই প্রয়োজন হবে না । কেউ যদি তর্ক করছেনempty()আরও উপযুক্ত, তারপরে তারা স্ক্রিপ্টিংয়ের প্রকাশের বিষয়ে তাদের নিজস্ব মতামতকে চাপ দিচ্ছে। যদি আপনি নীচে # 5 এর শর্তটি অস্পষ্ট বলে মনে করেন তবে আপনার কোডটিতে একটি ইনলাইন মন্তব্য যুক্ত করুন - তবে আমি তা করব না। নীচের লাইনটি হ'ল ফাংশন কল করার জন্য কোনও প্রোগ্রামেটিকাল সুবিধা নেই।

  3. আপনার স্ট্রিংয়ের মানটিতে একটি থাকতে পারে 0 যা আপনি সত্য / বৈধ / খালি মনে করতে চান? যদি তা হয় তবে কলাম মানটির দৈর্ঘ্য আছে কিনা তা আপনাকে কেবল পরীক্ষা করতে হবে।

    এখানে একটি ডেমো ব্যবহার করছেstrlen() । এটি স্ট্রিংটি বিস্ফোরিত হলে অর্থবহুল অ্যারে উপাদান তৈরি করবে কিনা তা নির্দেশ করে।

  4. আমি মনে করি এটি উল্লেখ করা গুরুত্বপূর্ণ যে শর্তহীন বিস্ফোরণ দ্বারা, আপনি খালি নয় এমন অ্যারে তৈরির নিশ্চয়তা পেয়েছেন। এখানে প্রমাণ: ডেমো অন্য কথায়, অ্যারেটি খালি আছে কিনা তা পরীক্ষা করা সম্পূর্ণরূপে অকেজো - এটি প্রতিবার খালি হবে না।

  5. যদি আপনার স্ট্রিংয়ে কোনও শূন্য মান থাকে না (কারণ, বলুন, এটি একটি সিএসভি যা আইডিগুলি নিয়ে গঠিত যা 1কেবলমাত্র বৃদ্ধি থেকে শুরু হয় ), তবেif ($gamerow['players']) { আপনার কেবল প্রয়োজন - গল্পের শেষ।

  6. ... তবে অপেক্ষা করুন, এই মানটির শূন্যতা নির্ধারণের পরে আপনি কী করছেন? যদি আপনার কাছে ডাউন-স্ক্রিপ্টের এমন কিছু থাকে যা প্রত্যাশা করে $playerlistতবে আপনি শর্তাধীনভাবে এই পরিবর্তনশীলটি ঘোষণা করছেন তবে আপনি আগের সারির মানটি ব্যবহার করে বা আবার বিজ্ঞপ্তি উত্পন্ন করার ঝুঁকি নিয়ে আছেন। সুতরাং আপনার কি নিঃশর্তভাবে কিছু$playerlist হিসাবে ঘোষণা করার দরকার আছে ? যদি স্ট্রিংয়ে সত্যবাদী কোনও মান থাকে না, আপনার অ্যাপ্লিকেশনটি খালি অ্যারে ঘোষণা করে কী উপকৃত হয়? সম্ভাবনা আছে, উত্তর হ্যাঁ। এই ক্ষেত্রে, আপনি নিশ্চিত করতে পারেন যে ভেরিয়েবলটি খালি অ্যারেতে পড়ে অ্যারে-টাইপ হয়েছে - এইভাবে আপনি যদি ভেরিয়েবলটিকে লুপে খাওয়ান তবে তাতে কিছু যায় আসে না। নিম্নলিখিত শর্তাধীন ঘোষণা সমস্ত সমতুল্য।

    • `if ($ গেমরো ['খেলোয়াড়']] {$ প্লেয়ারলিস্ট = বিস্ফোরিত (',', $ গেমরো ['প্লেয়ার']); } অন্য {$ প্লেয়ারলিস্ট = []; }
    • $playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];

আমি কেন এই মৌলিক কার্যটি ব্যাখ্যা করতে এত দৈর্ঘ্যে চলেছি?

  1. আমি এই পৃষ্ঠায় প্রায় প্রতিটি উত্তর হুইসেলব্লাউন করে ফেলেছি এবং এই উত্তরটি সম্ভবত প্রতিশোধের ভোটগুলি টানতে পারে (এই সাইটটি রক্ষাকারী হুইস্ল ব্লোয়ারদের ক্ষেত্রে এটি প্রায়শই ঘটে থাকে - যদি কোনও উত্তরের ডাউনটি হয় এবং কোনও মন্তব্য না থাকে তবে সর্বদা সন্দেহজনক হন)।
  2. আমি মনে করি এটি গুরুত্বপূর্ণ যে স্ট্যাকওভারফ্লো হ'ল একটি বিশ্বস্ত সংস্থান যা ভুল তথ্য এবং উপ-কৌশলগত কৌশলগুলি দিয়ে গবেষকদের বিষাক্ত করে না।
  3. আসন্ন বিকাশকারীদের সম্পর্কে আমি কতটা যত্নশীল তা এইভাবেই আমি প্রদর্শন করি যাতে তারা কেবল প্রজন্মের অনুলিপি-পেস্ট প্রোগ্রামারদের চামচ খাওয়ানোর পরিবর্তে কীভাবে এবং কেন তা শিখতে পারে।
  4. আমি প্রায়শই নতুন সদৃশ পৃষ্ঠাগুলি বন্ধ করতে পুরানো পৃষ্ঠাগুলি ব্যবহার করি - এটি প্রবীণ স্বেচ্ছাসেবীদের দায়িত্ব যারা দ্রুত নকলগুলি কীভাবে সন্ধান করতে জানে। খারাপ / মিথ্যা / সাব্পটিমাল / বিভ্রান্তিমূলক তথ্য সহ আমি কোনও পুরাতন পৃষ্ঠাটি নিজেকে রেফারেন্স হিসাবে ব্যবহার করতে আনতে পারি না কারণ তখন আমি সক্রিয়ভাবে একজন নতুন গবেষককে একটি অজুহাত দিচ্ছি।

@ptr এটি এখানে আছে।
মিকম্যাকুসা

1
empty($gamerow['players'])

$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ; আমি ব্যবহার করি তা যাচাই করার জন্য কিছু সময় আপনি উপাদান অ্যারের কী মানটি জানতে পারেন নাif ( count ( $matches ) > 0 )
সালেম

ধারণা করা হয় যে কলামটি ফলাফলের সেটে রয়েছে তাই empty()খুব বেশি কাজ করছে।
মিকম্যাকুসা

-1

আমি নিম্নলিখিত কোড সহ এই সমস্যাটি সমাধান করেছি।

$catArray=array();                          

$catIds=explode(',',$member['cat_id']);
if(!empty($catIds[0])){
foreach($catIds as $cat_id){
$catDetail=$this->Front_Category->get_category_detail($cat_id);
$catArray[]=$catDetail['allData']['cat_title'];
}
echo implode(',',$catArray);
}

1
স্ট্যাক ওভারফ্লোতে স্বাগতম! কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান, তা বর্ণনা করে এর দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নতি করবে এবং অন্যান্য অনুরূপ প্রশ্নের সাথে ভবিষ্যতের পাঠকদের জন্য আরও দরকারী করে তুলবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
sepehr

-3

এটি সমস্ত ক্ষেত্রে কাজ করে বলে মনে হচ্ছে

if(!empty(sizeof($array)))

3
এটির ওভারহেড অনেক বেশি। এই সমাধানটি কোনও বিকাশকারী কোনও কারণে কার্যকর করা উচিত নয়।
মিকম্যাকুসা

@ মিকম্যাকুসা গ্রেট পয়েন্ট, তবে কোন নবজাতক কোন অপারেশনগুলিকে খুব বেশি ওভারহেড গ্রহণ করে তা সনাক্ত করতে কীভাবে শিখবে? ছাড় দেওয়া কী, বা পারফরম্যান্স পরীক্ষা না চালিয়ে খুব বেশি ওভারহেডের জন্য ফেস ভ্যালু মানদণ্ডটি কী?
পিটিআরসিও

1
@ptr প্রতিটি ফাংশন কলে একটি "খরচ" আছে। যদি কোনও ফাংশন কল ছাড়াই কোনও কাজ সম্পন্ন করা যায়, তবে এটি কোনও প্রযুক্তিটি ছাড়িয়ে যাবে যা একটি ফাংশন কল ব্যবহার করে।
মিকম্যাকুসা

@ptr আমি এই প্রশ্নের জন্য একটি বিস্তৃত উত্তর পোস্ট করেছি। আমি আশা করি এটি এই নির্দিষ্ট পৃষ্ঠা সম্পর্কে আপনার যে কোনও উদ্বেগ সরিয়ে দিয়েছে।
মিকম্যাকুসা

@ মিকম্যাকুসা আপনার অর্থ কি অন্য পোস্টের লিঙ্ক অন্তর্ভুক্ত করা উচিত?
পিআরটিএওও

-4

কেমন:

ডিপার্টমেন্ট বিভাগেরস্কুল = অ্যারে ();
(খালি (is_array ($ বিভাগীয় স্কুল)))? $ ডিপার্টমেন্ট বিভাগেরস্কুল // বা প্রতিধ্বনি ফাঁকা নয়: অ্যারে ('সেট করা নেই' => 'সেট করা নেই। যোগাযোগ প্রশাসকের সাথে যোগাযোগ করুন'); // বা প্রতিধ্বনি খালি আছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.