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




implode (7)

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

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

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

पैदावार:

one---four--six

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

one-four-six

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


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

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

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

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

$result = array();

foreach($array as $row) { 
   if ($row != '') {
   array_push($result, $row); 
   }
}

implode('-', $result);

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

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

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

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

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

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


मुझे लगता है कि आप इसे निर्मित नहीं कर सकते (क्योंकि फ़ंक्शन उपयोगकर्ता परिभाषित फ़ंक्शन के साथ चल रहा है), लेकिन आप हमेशा array_filter() उपयोग कर सकते हैं।
कुछ इस तरह:

function rempty ($var)
{
    return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));

मुझे जो मिल सकता है उसके आधार पर, मैं कहूंगा कि संभावना है कि इसके लिए निर्मित 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;
}

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