খালি অ্যারে উপাদানগুলি সরান


783

ব্যবহারকারী যা জমা দিয়েছেন তার উপর ভিত্তি করে আমার অ্যারের কিছু উপাদান খালি স্ট্রিং। আমার সেই উপাদানগুলি অপসারণ করা দরকার। আমি এই আছে:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

কিন্তু এটি কাজ করে না। $linksArrayএখনও খালি উপাদান আছে। আমি এটি empty()ফাংশনটি দিয়ে করার চেষ্টা করেছি , তবে ফলাফলটি একই।


1
আমি ভেবেছিলাম এটি উল্লেখ করার মতো ছিল যে উপরের কোডটি কাজ করে না কারণ আনসেট (...) ফোরচ লুপের দ্বারা নির্মিত ভেরিয়েবলের উপর পরিচালিত হয়, মূল অ্যারে নয় যা স্পষ্টতই লুপের আগে যেমন থাকে তেমন থাকে।
সেভারিও

যদি (! খালি ($ লিঙ্ক)) {প্রতিধ্বনি $ লিঙ্ক; me এটি আমার পক্ষে কাজ করে
শিপলু

আপনি এমন একটি $ লিঙ্কটি পরিবর্তন করছেন যা পুনরায় প্রকাশ করা হয়নি! ফোরচ ব্যবহার করুন ($ লিঙ্কস অ্যারে হিসাবে $ কী => $ লিঙ্ক) আনসেট (লিঙ্কসআরাই [$ কী])
টিডি_নিজ্বিয়ার

উত্তর:


1547

আপনি যখন একটি স্ট্রিংয়ের অ্যারে নিয়ে কাজ করছেন, আপনি কেবল ব্যবহার করতে পারেন array_filter(), যা আপনার পক্ষে স্বাচ্ছন্দ্যে এই সমস্তগুলি পরিচালনা করে:

print_r(array_filter($linksArray));

মনে রাখবেন যে কোনও কলব্যাক সরবরাহ না করা হলে , সমান অ্যারেগুলির সমস্ত বন্টন FALSE( বুলিয়ান রূপান্তরিত দেখুন ) সরানো হবে। সুতরাং আপনার যদি এমন উপাদানগুলি সংরক্ষণ করতে হয় যা হুবহু স্ট্রিং থাকে তবে '0'আপনার একটি কাস্টম কলব্যাকের প্রয়োজন হবে:

// PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

16
array_filterখালি উপাদানগুলি অপসারণ করা উচিত। এবং যদি খালি পিএইচপি-র সংজ্ঞাটি আপনার সংজ্ঞার মতো না হয় তবে আপনি অজ্ঞাত উপাদান দিয়ে কলব্যাক বিকল্পটি পূরণ করতে পারেন যা অযাচিত উপাদানগুলিকে ছুঁড়ে ফেলে। বেনামে কল ব্যাক ব্যবহার করার জন্য আপনার অবশ্যই পিএইচপি 5.3 বা তার পরে থাকতে হবে। stackoverflow.com/questions/2412299/…
বাটল বাটকাস

76
অ্যারে_ফিল্টারটি অ্যারে ইনডেক্সগুলি পুনর্নির্মাণ করতে পারে না (বিবৃতিতে প্রসেস অ্যারে ব্যবহার করে সমস্যা দেখা দিতে পারে)। সুতরাং অ্যারে_ভ্যালু ফাংশন দিয়ে এগুলি সমস্ত মুছুন।
মিশাল - ওয়েদারা-নেট

8
উত্তরটি ভুল, কারণ এটি falseউপাদানগুলিও সরিয়ে ফেলবে । ( php.net/manual/en/function.array-filter.php )
pliashkou

5
@ দেজি আপনি কি অ্যারেটি ফিল্টার করার আগে মুদ্রণের চেষ্টা করেছেন? আমি মনে করি aদ্বিতীয় বার সেট করা কেবল প্রথমটি পুনরায় সেট করে।
কুলুব

5
@ ক্র্যানিও: যা ইতিমধ্যে অন্য একটি মন্তব্যে আচ্ছাদিত। এটি ভুল নয় তবে সম্ভবত আপনার প্রয়োজনীয়তার চেয়েও বিস্তৃত । এর অর্থ এই নয় যে অন্যান্য লোকেরা এখনও এটি সহায়ক হিসাবে খুঁজে পাচ্ছেন না; সর্বোপরি, যদি আপনার সমস্ত কিছু আপনার অ্যারেতে থাকে তবে এই উত্তরটি কেবল খালিগুলি সরিয়ে ফেলবে।
মার্টিজন পিটারস

169

আপনি array_filterখালি উপাদানগুলি অপসারণ করতে ব্যবহার করতে পারেন:

$emptyRemoved = array_filter($linksArray);

আপনি যদি (int) 0আপনার অ্যারের মধ্যে, আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

সম্পাদনা: সম্ভবত আপনার উপাদানগুলি প্রতি সেফ খালি নয় তবে এতে এক বা একাধিক স্পেস রয়েছে ... ব্যবহারের আগে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেনarray_filter

$trimmedArray = array_map('trim', $linksArray);

10
আমি কেবল এটি বোল্টক্লকের গৃহীত উত্তরে যুক্ত করেছি, "0" সমস্যাটি এড়াতে আপনি কেবল অ্যারে_ফিল্টার ($ foo, 'strlen') করতে পারতেন এবং কেবল শূন্য দৈর্ঘ্যের সাথে সরাতে পারেন।
এবি ক্যারল

2
@ নেজজারিও: ধরে নিচ্ছি scalarআপনার অ্যারেতে কেবল আইটেম রয়েছে হ্যাঁ। অন্যথায়, আপনি এটি করতে পারবেন না।
অ্যান্ড্রু মুর

2
পিএইচপি> = 5.3function remove_empty($array) { return array_filter($array, function($value){return !empty($value) || $value === 0;}); }
ভাইরাল

1
array_map()আমি কি সেই ফাঁকা অ্যারেগুলিতে ফাঁকা জায়গা দিয়েছিলাম!
Prodigy

126

এই বিষয়টির সর্বাধিক জনপ্রিয় উত্তর হ'ল একেবারে অসম্পূর্ণ।

নিম্নলিখিত পিএইচপি স্ক্রিপ্ট বিবেচনা করুন:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

কেন? কারণ একটি একক '0' অক্ষর সমন্বিত একটি স্ট্রিংও বুলিয়ান মিথ্যাতে মূল্যায়ন করে, সুতরাং এটি খালি স্ট্রিং না হলেও এটি এখনও ফিল্টার হয়ে যাবে। এটি একটি বাগ হবে।

ফিল্টারিং ফাংশন হিসাবে অন্তর্নির্মিত স্ট্র্লেন ফাংশনটি পাস করা কাজ করবে, কারণ এটি একটি খালি স্ট্রিংয়ের জন্য একটি শূন্য-শূন্য পূর্ণসংখ্যার এবং একটি খালি স্ট্রিংয়ের জন্য একটি শূন্য পূর্ণসংখ্যার ফেরত দেয়। বুলিয়ান রূপান্তরিত হওয়ার সময় অ-শূন্য পূর্ণ পূর্ণসংখ্যার সর্বদা সত্যের কাছে মূল্যায়ন করে, যখন বুলিয়ান রূপান্তরিত হয় তখন শূন্য পূর্ণসংখ্যার সর্বদা মিথ্যাতে মূল্যায়ন করে।

সুতরাং, পরম, নিশ্চিত, সঠিক উত্তরটি হ'ল:

$arr = array_filter($arr, 'strlen');

3
একমত। এটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত, যাদের অ্যারেটিতে স্ট্রিং রয়েছে
mwieczorek

2
সম্মত। অন্য অনেকের চেয়ে ভাল উত্তর, তবে এটি অবশ্যই লক্ষ করা উচিত যে বর্তমানে গৃহীত উত্তরগুলি প্রযুক্তিগতভাবে ভুল নয় কারণ "খালি" আসলে পিএইচপি-র মধ্যে বিশেষ অর্থ রাখে। (কিছু মান যে হিসাবে যোগ্যতা "খালি": 0, "", null)
rinogo

5
এগুলি ভুল নয়, এটি সমস্ত প্রসঙ্গে। কিছু ক্ষেত্রে মান 0 সংরক্ষণ করা গুরুত্বপূর্ণ হতে পারে। সুতরাং দয়া করে, আপনাকে বাদ দিয়ে সবাই ভুল বলে বলবেন না
Macr1408

6
অ্যারেতে আরও একটি অ্যারে থাকলে এটি ভাঙা হয়:strlen() expects parameter 1 to be string, array given
hpaknia

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

102
$linksArray = array_filter($linksArray);

"যদি কোনও কলব্যাক সরবরাহ না করা হয় তবে FALSE এর সমান ইনপুটের সমস্ত এন্ট্রি সরানো হবে।" - http://php.net/manual/en/function.array-filter.php


4
সমস্যাটি গুগল করার পরেও আমি এটি চেষ্টা করেছি। দুর্ভাগ্যক্রমে, এটি আমার জন্য ফাঁকা উপাদানগুলিতে ছেড়ে যায়।
হবে

18
এটি '0' অপসারণ করবে
ওআইএস

2
@ উইল: আপনি কি নিশ্চিত? এটি খালি স্ট্রিংগুলিও সরিয়ে দেয়, আমি এটি সফলভাবে পরীক্ষা করেছি। হতে পারে আপনার ইনপুট মানগুলির মধ্যে স্পেস রয়েছে এবং এর আগে ছাঁটাই করা উচিত। মতে বুলিয়ান রূপান্তর নিয়ম খালি স্ট্রিং মিথ্যাতে মূল্যায়ন হয়েছে এবং তাই array_filter দ্বারা সরানো হয়েছে।
acme


42

আপনি ঠিক করতে পারেন

array_filter($array)

অ্যারে_ফিল্টার: "যদি কোনও কলব্যাক সরবরাহ না করা হয় তবে FALSE এর সমান ইনপুটের সমস্ত এন্ট্রি সরানো হবে।" এর অর্থ হ'ল NULL, 0, '0', '', FALSE, অ্যারে () এর মানগুলিও মুছে ফেলা হবে।

অন্য বিকল্পটি করছে

array_diff($array, array(''))

যা NULL, '' এবং FALSE মান সহ উপাদানগুলি সরিয়ে ফেলবে।

আশাকরি এটা সাহায্য করবে :)

হালনাগাদ

এখানে একটি উদাহরণ।

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

সংক্ষেপে:

  • 0 বা '0' মুছে ফেলবে 0 এবং '0'
  • NULL, FALSE বা '' NULL, FALSE এবং '' মুছে ফেলবে

36
foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 

4
একটি সংক্ষিপ্ত, পঠনযোগ্য এবং নিরাপদ সমাধান যা সরিয়ে দেয় না falseএবং 0। এটিকে গ্রহণযোগ্য উত্তর হিসাবে একই মুহূর্তে পোস্ট করা হয়েছিল (এটি অনিরাপদ এবং ভুল), আমি কেবলমাত্র আপনার 8 টি অগ্রাধিকার গ্রহণযোগ্য উত্তরের 649 এর তুলনায় এক-লাইন সমাধানের চেয়ে কম বলে ধরে নিতে পারি।
rybo111

@ rybo111 - সম্ভবত, কলব্যাকে সেই যুক্তিটি ব্যবহার করা array_filter()একটি foreach()লুপের চেয়ে পরিচ্ছন্ন দৃষ্টিভঙ্গি হতে পারে
মার্ক বাকের

সম্ভবত দ্রুত, তবে আপনার সমাধানটি সর্বাধিক পঠনযোগ্য, যা গুরুত্বপূর্ণ। আপনার সমাধানটি প্রয়োজনীয়গুলির জন্য trim(), আমি সুপারিশ করবif(is_string($link) && trim($link) === '')
rybo111

33

আপনার অ্যারে থেকে খালি ("" খালি স্ট্রিং) উপাদানগুলি অপসারণ করতে অন্য একটি লাইনার।

$array = array_filter($array, function($a) {return $a !== "";});

দ্রষ্টব্য: এই কোড ইচ্ছাকৃতভাবে রাখে null, 0এবং falseউপাদান।


অথবা হতে পারে আপনি প্রথমে আপনার অ্যারে উপাদানগুলি ছাঁটাই করতে চান:

$array = array_filter($array, function($a) {
    return trim($a) !== "";
});

দ্রষ্টব্য: এই কোডটিও সরায় nullএবং falseউপাদানগুলি।


3
হুবহু আমি যা চেয়েছিলাম, এবং এটি পুরানো পিএইচপিগুলির সাথেও উপযুক্ত , ধন্যবাদ! ;-)
স্ট্যানো

1
@ জনকে ভুল এটির জন্য যেমন কলব্যাকের জন্য ব্যবহারকারী চান ঠিক তেমন প্রয়োজন, যদি না আপনি অ্যালজো জিরো এবং অন্যান্য মিথ্যা মানগুলি মুছে ফেলতে চান।
ক্র্যানিও

ওহ ... এটি একেবারে সুন্দর। গ্রহণযোগ্য হওয়া উচিত।
হেনরিক পিটারসন

20

সংক্ষেপে:

এটি আমার প্রস্তাবিত কোড:

$myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));

ব্যাখ্যা:

আমি মনে করি ব্যবহার array_filterভাল তবে যথেষ্ট নয়, কারণ মানগুলি এর মতো spaceএবং\n ..., অ্যারেতে রাখুন এবং এটি সাধারণত খারাপ।

তাই আমি সুপারিশ করছি মিশ্রণ ব্যবহার array_filterএবং array_map

array_map ছাঁটাই করার জন্য, array_filter খালি মানগুলি মুছে ফেলার strlenজন্য 0, মান রাখার জন্য , এবং array_valuesআপনার প্রয়োজনে পুনরায় সূচকের জন্য।

নমুনা:

$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");

// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);

// "a"
$new2 = array_filter(array_map('trim', $myarray));

// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');

// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

var_dump($new1, $new2, $new3, $new4);

ফলাফল:

array(5) {
  [0]=>
" string(1) "
  [1]=>
  string(1) "
"
  [2]=>
  string(2) "
"
  [4]=>
  string(1) " "
  [6]=>
  string(1) "a"
}
array(1) {
  [6]=>
  string(1) "a"
}
array(2) {
  [5]=>
  string(1) "0"
  [6]=>
  string(1) "a"
}
array(2) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "a"
}

অনলাইন পরীক্ষা:

http://phpio.net/s/5yg0


13

যদি আপনি একটি সংখ্যাসূচক অ্যারে নিয়ে কাজ করছেন এবং খালি উপাদানগুলি সরানোর পরে অ্যারেটিকে পুনরায় সূচকের প্রয়োজন হয় তবে অ্যারে_ভ্যালু ফাংশনটি ব্যবহার করুন :

array_values(array_filter($array));

আরও দেখুন: পিএইচপি রাইন্ডেক্স অ্যারে?


12

সবচেয়ে বেশি ভোট দেওয়া উত্তরটি ভুল বা কমপক্ষে পুরোপুরি সত্য নয় কারণ ওপি কেবল ফাঁকা স্ট্রিংয়ের কথা বলে। এখানে একটি সম্পূর্ণ ব্যাখ্যা:

কি খালি মানে?

প্রথমত, খালি মানে কী তা নিয়ে আমাদের অবশ্যই একমত হতে হবে । আপনি কি ফিল্টার আউট মানে:

  1. কেবল খালি স্ট্রিং ("")?
  2. কঠোরভাবে মিথ্যা মান? ( $element === false)
  3. falsey মূল্য দেন? (যেমন 0, 0.0, "", "0", নুল, অ্যারে () ...)
  4. পিএইচপি এর empty()ফাংশন সমতুল্য ?

আপনি মানগুলি কীভাবে ফিল্টার করবেন

কেবল খালি স্ট্রিংগুলি ফিল্টার করতে :

$filtered = array_diff($originalArray, array(""));

কেবল কঠোরভাবে মিথ্যা মানগুলি ফিল্টার করার জন্য , আপনাকে অবশ্যই কলব্যাক ফাংশনটি ব্যবহার করতে হবে :

$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
    return $var === false;
}

কলব্যাক এমন কোনও সংমিশ্রণের জন্যও কার্যকর যা আপনি কিছু বাদে "মিথ্যা" মানগুলি ফিল্টার করতে চান। (উদাহরণস্বরূপ, কেবলমাত্র ফেলে রেখে প্রতিটি nullএবং অন্যান্য ফিল্টার করুন ):false0

$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
    return ($var === 0 || $var === '0');
}

তৃতীয় এবং চতুর্থ কেসটি (শেষ অবধি আমাদের উদ্দেশ্যগুলির জন্য) সমতুল্য এবং এর জন্য আপনাকে যা ব্যবহার করতে হবে তা ডিফল্ট:

$filtered = array_filter($originalArray);

2
আপনি খুঁজে নিতে চান nullএবং falseকিন্তু 0 ত্যাগ করেন, তখন আপনার কাছে ব্যবহার করতে পারেন পিএইচপি এর বিল্ট-ইন strlenআপনার কলব্যাক যেমন ফাংশন।
কুলুব

10

(স্ট্রিং) 0 এর অ্যারের মান রাখার জন্য আমাকে এটি করতে হয়েছিল

$url = array_filter($data, function ($value) {
  return (!empty($value) || $value === 0 || $value==='0');
});


9

বহুমাত্রিক অ্যারে জন্য

$data = array_map('array_filter', $data);
$data = array_filter($data);



7

আমি অ্যারে থেকে খালি উপাদানগুলি সরাতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করি

for ($i=0; $i<$count($Array); $i++)
  {
    if (empty($Array[$i])) unset($Array[$i]);
  }

7

লুপগুলির বিকল্পের অবদান রাখতে চান ... কীগুলির ফাঁকগুলি দূর করার জন্য ...

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

আমি আরও কিছু এরকম খুঁজছিলাম: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/

অ্যারে_ফিল্টার এবং অ্যারে_স্লাইসের সংমিশ্রণটি কৌশলটি করে।

$example = array_filter($example); $example = array_slice($example,0);

দক্ষতা বা মাপদণ্ডের বিষয়ে ধারণা নেই তবে এটি কার্যকর works


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

6
$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");   

foreach ($my as $key => $value) {
    if (is_null($value)) unset($my[$key]);
}

foreach ($my as $key => $value) {
    echo   $key . ':' . $value . '<br>';
} 

আউটপুট

1: 5

2: 6



5

কেবল একটি লাইন: আপডেট (@ সোথারকে ধন্যবাদ):

$array_without_empty_values = array_filter($array);

আপনার দ্বিতীয় প্যারামিটারের দরকার নেই: $ ক্লিন_আরে = অ্যারে_ফিল্টার ($ নোংরা_আরে);
সুথার

4

array_filterখালি মানগুলি মুছে ফেলতে ফাংশনটি ব্যবহার করুন :

$linksArray = array_filter($linksArray);
print_r($linksArray);

তিনি খালি স্ট্রিংগুলি সরাতে চান , যা খালি মানগুলির সমতুল্য নয়।
ক্র্যানিও

4

খালি অ্যারে উপাদানগুলি সরান

function removeEmptyElements(&$element)
{
    if (is_array($element)) {
        if ($key = key($element)) {
            $element[$key] = array_filter($element);
        }

        if (count($element) != count($element, COUNT_RECURSIVE)) {
            $element = array_filter(current($element), __FUNCTION__);
        }

        return $element;
    } else {
        return empty($element) ? false : $element;
    }
}

$data = array(
    'horarios' => array(),
    'grupos' => array(
        '1A' => array(
            'Juan' => array(
                'calificaciones' => array(
                    'Matematicas' => 8,
                    'Español' => 5,
                    'Ingles' => 9,
                ),
                'asistencias' => array(
                    'enero' => 20,
                    'febrero' => 10,
                    'marzo' => '',
                )
            ),
            'Damian' => array(
                'calificaciones' => array(
                    'Matematicas' => 10,
                    'Español' => '',
                    'Ingles' => 9,
                ),
                'asistencias' => array(
                    'enero' => 20,
                    'febrero' => '',
                    'marzo' => 5,
                )
            ),
        ),
        '1B' => array(
            'Mariana' => array(
                'calificaciones' => array(
                    'Matematicas' => null,
                    'Español' => 7,
                    'Ingles' => 9,
                ),
                'asistencias' => array(
                    'enero' => null,
                    'febrero' => 5,
                    'marzo' => 5,
                )
            ),
        ),
    )
);

$data = array_filter($data, 'removeEmptyElements');
var_dump($data);

Works এটা কাজ করে!


3

আপনার পদ্ধতি অনুসারে, আপনি কেবল সেই উপাদানগুলিকে অন্য অ্যারেতে ধরতে পারেন এবং নীচের মত একটি ব্যবহার করতে পারেন,

foreach($linksArray as $link){
   if(!empty($link)){
      $new_arr[] = $link
   }
}

print_r($new_arr);

1

এই ** ** উদাহরণ চেষ্টা করুন

$or = array(
        'PersonalInformation.first_name' => $this->request->data['User']['first_name'],
        'PersonalInformation.last_name' => $this->request->data['User']['last_name'],
        'PersonalInformation.primary_phone' => $this->request->data['User']['primary_phone'],
        'PersonalInformation.dob' => $this->request->data['User']['dob'],
        'User.email' => $this->request->data['User']['email'],
    );



 $or = array_filter($or);

    $condition = array(
        'User.role' => array('U', 'P'),
        'User.user_status' => array('active', 'lead', 'inactive'),
        'OR' => $or
    );

1
এটা কি? অন্যান্য খুব প্রাসঙ্গিক উত্তর রয়েছে। আপনি এখানে কি যুক্ত করছেন?
ফলিক্স গাগনন-গ্রেনিয়ার

এখানে প্রশ্নটি কী ছিল ইউআরএলটি পরীক্ষা করে দেখুন !! / * খালি অ্যারে উপাদানটি মুছে ফেলুন * /
আশীষ পাঠক 4'16

1

আমার মনে হয় অ্যারে_ওয়াকটি এখানে অনেক বেশি উপযুক্ত

$linksArray = array('name', '        ', '  342', '0', 0.0, null, '', false);

array_walk($linksArray, function(&$v, $k) use (&$linksArray){
    $v = trim($v);
    if ($v == '')
        unset($linksArray[$k]);
});
print_r($linksArray);

আউটপুট:

Array
(
    [0] => name
    [2] => 342
    [3] => 0
    [4] => 0
)
  • আমরা নিশ্চিত করেছি যে ব্যবহারকারী একাধিক স্থান যোগ করলেও খালি মানগুলি সরানো হবে
  • আমরা বৈধ মানগুলি থেকে খালি স্থানগুলি ছাঁটাই করেছি

  • অবশেষে, কেবল (নাল), (বুলিয়ান ফালস) এবং ('') খালি স্ট্রিং হিসাবে বিবেচিত হবে

হিসাবে Falseএটা এটি অপসারণ করতে, কারণ আমি যতদূর জানি ব্যবহারকারী বুলিয়ান মান জমা দিতে পারবেন না ঠিক আছে।


0

এই ধরণের জিনিসগুলির সাথে আপনি কী চান এবং কী চান না সে সম্পর্কে স্পষ্ট হওয়া আরও ভাল।

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

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

আমার সমাধানে, এটি কী ঘটছে তা এক নজরে পরিষ্কার। কিছু রাখতে শর্তাধীন সরান বা অতিরিক্ত মান ফিল্টার করতে একটি নতুন শর্ত যুক্ত করুন।

array_filter()যেহেতু আমি কেবল এটি একটি কাস্টম কলব্যাক দিয়ে যাচ্ছি তার প্রকৃত ব্যবহারটিকে উপেক্ষা করুন - আপনি চাইলে আপনি এগিয়ে যেতে এবং এটি তার নিজস্ব ফাংশনে বের করতে পারেন। আমি কেবল এটি একটি foreachলুপের জন্য চিনি হিসাবে ব্যবহার করছি ।

<?php

$xs = [0, 1, 2, 3, "0", "", false, null];

$xs = array_filter($xs, function($x) {
    if ($x === null) { return false; }
    if ($x === false) { return false; }
    if ($x === "") { return false; }
    if ($x === "0") { return false; }
    return true;
});

$xs = array_values($xs); // reindex array   

echo "<pre>";
var_export($xs);

এই পদ্ধতির আর একটি সুবিধা হ'ল আপনি ফিল্টারিংটিকে বিমূর্ত ফাংশন হিসাবে পূর্বাভাস দিতে পারেন যা অ্যারের জন্য একক মান ফিল্টার করে এবং একটি কমপোজ্য সমাধান পর্যন্ত তৈরি করতে পারে।

এই উদাহরণটি এবং আউটপুটটির জন্য ইনলাইন মন্তব্যগুলি দেখুন।

<?php

/**
 * @param string $valueToFilter
 *
 * @return \Closure A function that expects a 1d array and returns an array
 *                  filtered of values matching $valueToFilter.
 */
function filterValue($valueToFilter)
{
    return function($xs) use ($valueToFilter) {
        return array_filter($xs, function($x) use ($valueToFilter) {
            return $x !== $valueToFilter;
        });
    };
}

// partially applied functions that each expect a 1d array of values
$filterNull = filterValue(null);
$filterFalse = filterValue(false);
$filterZeroString = filterValue("0");
$filterEmptyString = filterValue("");

$xs = [0, 1, 2, 3, null, false, "0", ""];

$xs = $filterNull($xs);        //=> [0, 1, 2, 3, false, "0", ""]
$xs = $filterFalse($xs);       //=> [0, 1, 2, 3, "0", ""]
$xs = $filterZeroString($xs);  //=> [0, 1, 2, 3, ""]
$xs = $filterEmptyString($xs); //=> [0, 1, 2, 3]

echo "<pre>";
var_export($xs); //=> [0, 1, 2, 3]

এখন আপনি গতিশীলভাবে একটি ফাংশন তৈরি করতে পারেন যা আপনার জন্য এই আংশিক প্রয়োগিত ফাংশনগুলি প্রয়োগ করবে filterer()usingpipe()

<?php

/**
 * Supply between 1..n functions each with an arity of 1 (that is, accepts
 * one and only one argument). Versions prior to php 5.6 do not have the
 * variadic operator `...` and as such require the use of `func_get_args()` to
 * obtain the comma-delimited list of expressions provided via the argument
 * list on function call.
 *
 * Example - Call the function `pipe()` like:
 *
 *   pipe ($addOne, $multiplyByTwo);
 *
 * @return closure
 */
function pipe()
{
    $functions = func_get_args(); // an array of callable functions [$addOne, $multiplyByTwo]
    return function ($initialAccumulator) use ($functions) { // return a function with an arity of 1
        return array_reduce( // chain the supplied `$arg` value through each function in the list of functions
            $functions, // an array of functions to reduce over the supplied `$arg` value
            function ($accumulator, $currFn) { // the reducer (a reducing function)
                return $currFn($accumulator);
            },
            $initialAccumulator
        );
    };
}

/**
 * @param string $valueToFilter
 *
 * @return \Closure A function that expects a 1d array and returns an array
 *                  filtered of values matching $valueToFilter.
 */
function filterValue($valueToFilter)
{
    return function($xs) use ($valueToFilter) {
        return array_filter($xs, function($x) use ($valueToFilter) {
            return $x !== $valueToFilter;
        });
    };
}

$filterer = pipe(
    filterValue(null),
    filterValue(false),
    filterValue("0"),
    filterValue("")
);

$xs = [0, 1, 2, 3, null, false, "0", ""];
$xs = $filterer($xs);

echo "<pre>";
var_export($xs); //=> [0, 1, 2, 3]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.