मेरे पास एक सरणी है जो इस तरह दिखता है:
array(
'abc' => 0,
'foo-bcd' => 1,
'foo-def' => 1,
'foo-xyz' => 0,
// ...
)
मैं केवल उन तत्वों को कैसे प्राप्त कर सकता हूं जिनके साथ शुरू होता है foo-
?
मेरे पास एक सरणी है जो इस तरह दिखता है:
array(
'abc' => 0,
'foo-bcd' => 1,
'foo-def' => 1,
'foo-xyz' => 0,
// ...
)
मैं केवल उन तत्वों को कैसे प्राप्त कर सकता हूं जिनके साथ शुरू होता है foo-
?
जवाबों:
$arr_main_array = array('foo-test' => 123, 'other-test' => 456, 'foo-result' => 789);
foreach($arr_main_array as $key => $value){
$exp_key = explode('-', $key);
if($exp_key[0] == 'foo'){
$arr_result[] = $value;
}
}
if(isset($arr_result)){
print_r($arr_result);
}
कार्यात्मक दृष्टिकोण:
Http://php.net/array_filterarray_filter_key
में टिप्पणियों से एक प्रकार का फ़ंक्शन चुनें या अपना स्वयं का लिखें। तो आप कर सकते हैं:
$array = array_filter_key($array, function($key) {
return strpos($key, 'foo-') === 0;
});
प्रक्रियात्मक दृष्टिकोण:
$only_foo = array();
foreach ($array as $key => $value) {
if (strpos($key, 'foo-') === 0) {
$only_foo[$key] = $value;
}
}
वस्तुओं का उपयोग करते हुए प्रक्रियात्मक दृष्टिकोण:
$i = new ArrayIterator($array);
$only_foo = array();
while ($i->valid()) {
if (strpos($i->key(), 'foo-') === 0) {
$only_foo[$i->key()] = $i->current();
}
$i->next();
}
array_filter()
, जिसका उपयोग आप कस्टम array_filter_key()
फ़ंक्शन की आपूर्ति करने के बजाय कर सकते हैं ।
यह है कि मैं इसे कैसे करूँगा, हालांकि मैं आपको यह समझने से पहले अधिक कुशल सलाह नहीं दे सकता कि आप जो मूल्य प्राप्त करते हैं, उसके साथ क्या करना चाहते हैं।
$search = "foo-";
$search_length = strlen($search);
foreach ($array as $key => $value) {
if (substr($key, 0, $search_length) == $search) {
...use the $value...
}
}
foreach ($array as $key => $value) { if (0 === strpos($key, 'foo-')) { ...use the $value... } }
बस मैंने array_filter
इस प्रकार समाधान प्राप्त करने के लिए फ़ंक्शन का उपयोग किया
<?php
$input = array(
'abc' => 0,
'foo-bcd' => 1,
'foo-def' => 1,
'foo-xyz' => 0,
);
$filtered = array_filter($input, function ($key) {
return strpos($key, 'foo-') === 0;
}, ARRAY_FILTER_USE_KEY);
print_r($filtered);
उत्पादन
Array
(
[foo-bcd] => 1
[foo-def] => 1
[foo-xyz] => 0
)
लाइव चेक के लिए https://3v4l.org/lJCse
foreach($arr as $key => $value)
{
if(preg_match('/^foo-/', $key))
{
// You can access $value or create a new array based off these values
}
}
Erisco के कार्यात्मक दृष्टिकोण में संशोधन ,
array_filter($signatureData[0]["foo-"], function($k) {
return strpos($k, 'foo-abc') === 0;
}, ARRAY_FILTER_USE_KEY);
यह मेरे लिए काम किया।
ऊपर दिए गए @Suresh Velusamy के उत्तर के अलावा (जिसे कम से कम PHP 5.6.0 की आवश्यकता है) यदि आप PHP के एक पूर्व संस्करण पर हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:
<?php
$input = array(
'abc' => 0,
'foo-bcd' => 1,
'foo-def' => 1,
'foo-xyz' => 0,
);
$filtered = array_filter(array_keys($input), function($key) {
return strpos($key, 'foo-') === 0;
});
print_r($filtered);
/* Output:
Array
(
[1] => foo-bcd
[2] => foo-def
[3] => foo-xyz
)
// the numerical array keys are the position in the original array!
*/
// if you want your array newly numbered just add:
$filtered = array_values($filtered);
print_r($filtered);
/* Output:
Array
(
[0] => foo-bcd
[1] => foo-def
[2] => foo-xyz
)
*/
$key => $value
जोड़ी के साथ वास्तविक सरणी को निकालते हैं । यह इस उत्तर के आउटपुट में बताया गया है, लेकिन अभी तक स्पष्ट रूप से उल्लेख नहीं किया गया है