php - रिक्त सरणी आइटम छोड़ते समय मैं सरणी कैसे लगा सकता हूं?




implode (6)

आप array_filter() उपयोग कर सकते हैं:

यदि कोई कॉलबैक नहीं दिया जाता है, तो FALSE बराबर इनपुट की सभी प्रविष्टियां ( बूलियन में कनवर्ट करना देखें) हटा दी जाएंगी।

implode('-', array_filter($array));

जाहिर है यह आपके सरणी में 0 (या कोई अन्य मान जो false करने का मूल्यांकन करता false ) पर काम नहीं करेगा और आप इसे रखना चाहते हैं। लेकिन फिर आप अपना खुद का कॉलबैक फ़ंक्शन प्रदान कर सकते हैं।

पर्ल की join() ) खाली सरणी मानों को अनदेखा करता है (छोड़ देता है); PHP का implode() प्रकट नहीं होता है।

मान लीजिए मेरे पास एक सरणी है:

$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);

पैदावार:

one---four--six

इसके बजाय (आईएमएचओ बेहतर):

one-four-six

जिस व्यवहार के लिए मैं खोज रहा हूं उसके साथ कोई अन्य अंतर्निहित? या यह एक कस्टम नौकरी होने जा रहा है?


आपको फ़िल्टर को कैसे लागू करना चाहिए, केवल उस पर निर्भर करता है जिसे आप "खाली" के रूप में देखते हैं।

function my_filter($item)
{
    return !empty($item); // Will discard 0, 0.0, '0', '', NULL, array() of FALSE
    // Or...
    return !is_null($item); // Will only discard NULL
    // or...
    return $item != "" && $item !== NULL; // Discards empty strings and NULL
    // or... whatever test you feel like doing
}

function my_join($array)
{
    return implode('-',array_filter($array,"my_filter"));
} 

इसे इस्तेमाल करे:

if(isset($array))  $array = implode(",", (array)$array);

मुझे जो मिल सकता है उसके आधार पर, मैं कहूंगा कि संभावना है कि इसके लिए निर्मित PHP का उपयोग करने का कोई तरीका नहीं है। लेकिन आप शायद इस तरह के साथ कुछ कर सकते हैं:

function implode_skip_empty($glue,$arr) {
      $ret = "";
      $len = sizeof($arr);
      for($i=0;$i<$len;$i++) {
          $val = $arr[$i];    
          if($val == "") {
              continue;
          } else {
            $ret .= $arr.($i+1==$len)?"":$glue;
          }
      }
      return $ret;
}

array_fileter() यहां स्वीकार्य तरीका प्रतीत होता है, और शायद अभी भी सबसे मजबूत जवाब tbh है।

हालांकि, यदि आप गारंटी दे सकते हैं कि "गोंद" वर्ण पहले से ही प्रत्येक सरणी तत्व के तारों में मौजूद नहीं है (जो सबसे व्यावहारिक परिस्थितियों में दिया जाएगा - अन्यथा आप अंतर करने में सक्षम नहीं होंगे सरणी में वास्तविक डेटा से गोंद):

$array = array('one', '', '', 'four', '', 'six');
$str   = implode('-', $array);
$str   = preg_replace ('/(-)+/', '\1', $str);

null , false , empty स्ट्रिंग को हटाने के लिए, 0 संरक्षित करें, आदि func का उपयोग करें। ' strlen '

$arr = [null, false, "", 0, "0", "1", "2", "false"];
print_r(array_filter($arr, 'strlen'));

आउटपुट होगा:

//Array ( [3] => 0 [4] => 0 [5] => 1 [6] => 2 [7] => false )




implode