2014-12-19 3 views
-1

Я следующий массивПоиск значения в массиве из разделенных запятыми значения в PHP

Array 
(
    [0] => Array 
     (
      [data] => PHP 
      [attribs] => Array 
       (
       ) 

      [xml_base] => 
      [xml_base_explicit] => 
      [xml_lang] => 
     ) 

    [1] => Array 
     (
      [data] => Wordpress 
      [attribs] => Array 
       (
       ) 

      [xml_base] => 
      [xml_base_explicit] => 
      [xml_lang] => 
     ) 
) 

один varialbe как $ Var = 'Php, Joomla';

Я попытался следующие, но не работает

$key = in_multiarray('PHP', $array,"data"); 
function in_multiarray($elem, $array,$field) 
    { 
     $top = sizeof($array) - 1; 
     $bottom = 0; 
     while($bottom <= $top) 
     { 
      if($array[$bottom][$field] == $elem) 
       return true; 
      else 
       if(is_array($array[$bottom][$field])) 
        if(in_multiarray($elem, ($array[$bottom][$field]))) 
         return true; 

      $bottom++; 
     }   
     return false; 
    } 

так хочу, чтобы проверить, если какое-либо значение в $ ВДП существует в массиве (чувствительно к регистру)

Как я могу сделать это без цикла?

+0

Loop корыто его. Что вы наделали. Покажите некоторое усилие – putvande

+0

foreach() explode() и buisnesslogic - ваши любимые – donald123

+0

@Bhumi Shah, это ваш настоящий массив, может ли глубина массива быть больше этого? –

ответ

1

Это должно работать для вас:

(Put несколько комментариев в коде объяснить, Что goning на)

<?php 

    //Array to search in 
    $array = array(
       array(
        "data" => "PHP", 
        "attribs" => array(), 
        "xml_base" => "", 
        "xml_base_explicit" => "", 
        "xml_lang" => "" 
       ), 
       array(
       "data" => "Wordpress", 
       "attribs" => array(), 
       "xml_base" => "", 
       "xml_base_explicit" => "", 
       "xml_lang" => "Joomla" 
       ) 
      ); 

    //Values to search 
    $var = "Php, Joomla"; 

    //trim and strtolower all search values and put them in a array 
    $search = array_map(function($value) { 
        return trim(strtolower($value)); 
    }, explode(",", $var)); 

    //function to put all non array values into lowercase 
    function tolower($value) { 

     if(is_array($value)) 
      return array_map("tolower", $value); 
     else 
      return strtolower($value); 

    } 

    //Search needle in haystack 
    function in_array_r($needle, $haystack, $strict = false) { 
     foreach ($haystack as $item) { 
      if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
       return true; 
      } 
     } 

     return false; 
    } 

    //Search ever value in array 
    foreach($search as $value) { 

     if(in_array_r($value, array_map("tolower", array_values($array)))) 
      echo $value . " found<br />"; 
    } 

?> 

Выход:

php found 
joomla found 
+0

Спасибо. он работает для значения fix, но если у меня есть $ var = 'Php 5.4, Joomla'; то также работают? –

+0

@BhumiShah Если у вас есть значение в массиве, оно будет работать: например: '" xml_base "=>" PHP 5.4 ",' и у вас есть: '$ var = 'pHp 5.4, Joomla';' тогда он будет работать yes – Rizier123

+0

Значение не в массиве, но PHP = PHP 5.4, поэтому он должен дать значение –

0

Насколько я понимаю, вы пытаетесь передать строку ex: 'php' и ключ: 'data' элемента. , поэтому ваш ключ может содержать одно значение или массив.

$key = in_multiarray("php", $array,"data"); 
    var_dump($key); 
    function in_multiarray($elem, $array,$field) 
    { 
      $top = sizeof($array) - 1; 
      $bottom = 0; 
      while($bottom <= $top) 
      { 

       if(is_array($array[$bottom][$field])) 
       { 
        foreach($array[$bottom][$field] as $value) 
        { 
         if(strtolower(trim($value)) == strtolower(trim($elem))) 
         { 
          return true; 
         } 
        } 
        } 
        else if(strtolower(trim($array[$bottom][$field])) == strtolower(trim($elem))) 
        { 
        return true; 
        } 

       $bottom++; 
      }   

     return false; 
    } 
+0

Он не работает для разделенной запятой строки $ var = 'Php, Joomla'; –

+0

Разверните строку и создайте массив, попробуйте использовать этот массив, попробуйте :) –

Смежные вопросы