PHP array_search не работает - PullRequest
1 голос
/ 12 июля 2011

Может кто-нибудь сообщить мне, почему array_search не работает для меня?Все, что я хочу, это искать значение и получать соответствующее значение ключа, например, если я ищу wiliam, я должен получить 4 .. Это просто, но не работает для меня

<code><?php
$fqlResult[0]['uid']='1';
$fqlResult[0]['name']='Jay';
$fqlResult[1]['uid']='2';
$fqlResult[1]['name']='UserName2';
$fqlResult[2]['uid']='3';
$fqlResult[2]['name']='Frances';
$fqlResult[3]['uid']='4';
$fqlResult[3]['name']='William';



        for($i=0;$i<count($fqlResult);$i++)
        {

            $userdbname="'".$fqlResult[$i]['name']."'";
            $userdb[$userdbname]="'".$fqlResult[$i]['uid']."'"; 

        }


echo "<pre>";
print_r($userdb);
echo "
"; echo array_search ('4', $ userdb);?>

Ответы [ 7 ]

3 голосов
/ 12 июля 2011

Это не работает, потому что array_seach ищет значения, а "Уильям" является ключом. Чтобы усложнить ситуацию, ваши значения и ключи заключены в одинарные кавычки во время цикла for.

Вы хотели бы сделать что-то вроде этого:

if ( ! empty($userdb["'William'"]) )
{
  // Echoes "'4'"
  echo $userdb["'William'"];
}

// To find user ID "'4'"
// Outputs "'William'"
echo array_search("'4'", $userdb);

Если вы не хотите, чтобы все было заключено в одинарные кавычки , вам нужно изменить цикл for следующим образом:

for($i=0;$i<count($fqlResult);$i++)
{
  $userdbname=$fqlResult[$i]['name'];
  $userdb[$userdbname]=$fqlResult[$i]['uid']; 
}

if ( ! empty($userdb["William"]) )
{
  // Outputs "4" (without the single quotes)
  echo $userdb["William"];
}

// To find user ID "4" (without the single quotes)
// Outputs "William"
echo array_search('4', $userdb);
0 голосов
/ 12 июля 2011

Вы можете удалить цитаты в $userdbname="'".$fqlResult[$i]['name']."'"; переписать его на

$userdbname= $fqlResult[$i]['name'];

0 голосов
/ 12 июля 2011

попробуйте это:

foreach($fqlResult as $result)
{
    $name = $result["name"];
    $uid = $result["uid"];
    $userdb[$name] = $uid;
}

, затем вы хотите использовать array_key_exists (), чтобы найти ключ.array_search () работает только для поиска значений, а не ключей.

$nameExists = array_key_exists("William",$userdb);
0 голосов
/ 12 июля 2011

array_search работает только с массивами скалярных данных.Вы пытаетесь найти массив массивов.Вы можете легко найти массив самостоятельно:

function search_array_col($array, $col, $val)
{
   foreach ($array as $key => $a)
   {
     if ($a[$col] == $val) return $key;
   }

   return null;
}

echo search_array_col($fqlResult, 'name', 'William') , "\n";
echo search_array_col($fqlResult, 'uid', '4') , "\n";

Редактировать: н / м, я неправильно прочитал ваш код.Однако вы все равно можете использовать это для поиска в исходном массиве, поэтому я оставлю ответ для справки.

0 голосов
/ 12 июля 2011

Изменить

$userdb[$userdbname]="'".$fqlResult[$i]['uid']."'";

с этим

$userdb[$i] = "{$fqlResult[$i]['name']}";
0 голосов
/ 12 июля 2011
for($i=0;$i<count($fqlResult);$i++)
        {

            $userdbname=$fqlResult[$i]['uid'];
            $userdb[$userdbname]=$fqlResult[$i]['name']; 

        }
0 голосов
/ 12 июля 2011

array_search () ищет значения, а не ключи.

Если вы хотите проверить наличие чего-либо, что вы используете в качестве ключа в массиве, вы можете просто использовать isset:

if(isset($userdb['William'])) {
    echo "$userdb[William] is William's uid!";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...