Поиск внутри массива значений на выходе MYSQL - PullRequest
0 голосов
/ 05 мая 2009

Код ниже, похоже, не работает и не находит ничего в массиве. Я использую "in_array" для поиска иглы в стеке. Я также попытался взорвать содержимое с разделением запятой и не будет работать. Какие-либо предложения? Также я попробовал "array_search".

$q4 = "SELECT domain_name,slots_config.bid FROM slots_pid,slots_config,slots_sites 
WHERE slots_config.bid=slots_pid.bid && slots_sites.aid=slots_pid.aid";
$result4 = mysql_query($q4);

while($row = mysql_fetch_array($result4))
{
    $resultarray[] = $row;
}


if (in_array("test",$resultarray))
  {
  echo "Match found";
  }
else
  {
  echo "Match not found";
  }

Ответы [ 4 ]

2 голосов
/ 05 мая 2009

Похоже, что у вас есть «массив массивов». То есть в вашем цикле while () $ row - это массив, который соответствует данным из вашего запроса mysql. Таким образом, каждый элемент $ resultarray фактически содержит массив, а не строку.

Попробуйте сделать это: print_r($resultarray). Это отобразит всю структуру $ resultarray, и вы увидите, как вы создаете массив массивов.

Чтобы использовать in_array, вам нужно сделать что-то похожее на in_array("test", $resultarray[0])

0 голосов
/ 05 мая 2009

Я считаю, что проблема, с которой вы столкнулись, заключается в том, что in_array ищет только первое измерение вашего двумерного массива. Я также не понимаю, почему вы загружаете весь результат в массив перед поиском (но, возможно, это полезно в других местах вашей программы).

Попытка:

 $found = false;
 while($row = mysql_fetch_array($result4))
 {
    if (in_array($needle, $row){
      print "here it is";
      $found = true;
      break;
 }

 if (!$found) {
      print "not found";
 }
0 голосов
/ 05 мая 2009
$q4 = "SELECT domain_name,slots_config.bid FROM slots_pid,slots_config,slots_sites 
WHERE slots_config.bid=slots_pid.bid && slots_sites.aid=slots_pid.aid";
$result4 = mysql_query($q4);

while($row = mysql_fetch_array($result4))
{
  if (in_array("test",$row))
  {
     echo "Match found";
  }
  else
  {
     echo "Match not found";
  }
}
0 голосов
/ 05 мая 2009

in_array() не будет работать с таким массивом, потому что он многомерный.

Ваш массив выглядит так:

$resultarray[0]['domain_name'] = 'first row domain name';
$resultarray[0]['bid'] = 'first row bid';
$resultarray[1]['domain_name'] = 'second row domain name';
...

Вы не можете использовать in_array() для поиска в этом, так что вам придется делать это с другим методом, например, циклически повторять массив или строить $resultarray по-другому.

Точно так же array_search() не работает с многомерными массивами, поэтому вы можете сделать что-то вроде зацикливания первого измерения и array_search() -из каждого второго измерения.

Дайте мне знать, если вам нужно больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...