2016-08-17 89 views
4

这是我的代码示例数组..如果用户搜索523465然后索引应该返回的主数组userdb..ihave尝试了几种方式,但未能得到正确的output.can有人帮助我?数组搜索使用php

<?php 
    $userdb = Array (
     (0) => Array (
      (uid) => Array (
        (0) => Array (
          '10770' 
        ), 

        (1) => Array (
          '523465' 
        ), 

        (2) => Array (
          '4042389' 
        ) 
      ), 
      (name) => 'Sandra Shush', 
      (url) => 'urlof100' 
    ), 

    (1) => Array (
      (uid) => Array (
        (0) => Array (
          '102320' 
        ), 

        (1) => Array (
          '532465' 
        ), 

        (2) => Array (
          '40432389' 
        ) 
      ), 
      (name) => 'Stefanie Mcmohn', 
      (pic_square) => 'urlof100' 
    )); 
    echo '<pre>'; 
    print_r(array_column ($userdb, 'uid')); 
    $key = array_search (5432365, array_column ($userdb, 'uid')); 

    echo ("The key is: " . $key); 
+0

你的接受输出是什么? – Dave

+0

假设如果我搜索uid值102320,那么键值1应该由代码返回,即$ userdb主数组的索引应返回.. – user3860618

+0

请参阅我的答案。 http://stackoverflow.com/a/38995189/1960558 –

回答

0
foreach ($userdb as $key=> $db) { 
    if (in_array($key, $db["uid"])) { 
     $parent_key = $key; 
     break; 
    } 
} 

echo $parent_key; 
2

几个foreach循环会做的工作:如果你将要访问多个用户来说,它可能是有意义的创建一个包装类,保持地图

function user_from_uid(array $usersdb, $uid){ 

    foreach($usersdb as $user){ 
     foreach($user['uid'] as $id){ 
      if($id==$uid){ 
       return $user; 
      } 
     } 
    } 
    //handle non existent user somehow 
    return false; //or throw exception etc 

} 

对用户的用户:

class UserList 
{ 

    private $usersArray, $uidMap; 

    function __construct($usersArray) 
    { 
     $this->usersArray = $usersArray; 
     $this->uidMap=[]; 
     $this->createMap(); 
    } 

    private function createMap() 
    { 
     foreach($this->usersArray as $key => $user){ 
      foreach($user['uid'] as $uid){ 
       $this->uidMap[$uid]=$key; 
      } 
     } 
    } 

    function getUserByUid($uid) 
    { 
     if(isset($this->uidMap[$uid])){ 
      return $this->usersArray[$this->uidMap[$uid]]; 
     } 
     //handle non existent user somehow 
     return false; //or throw exception etc   
    } 

} 

$userList = new UserList($usersdb); 

$someUser = $userList->getUserByUid('523465'); 
$another = $userList->getUserByUid('40432389'); 
3

几个foreach循环需要。这里是我为你写的功能。第一个参数是你的数组,第二个参数是你想要搜索的值。

function searchArrayKey($userdb,$given_value){ 

foreach ($userdb as $firstkey => $val) { 

    foreach ($val as $secondkey => $nestedarray){ 

     foreach ($nestedarray as $thirdkey => $thirdnestedarray){ 
      if ($thirdnestedarray['0'] == $given_value){ 
       return $firstkey; 
      } 
     } 
    } 
} 

}

然后用它来获得主阵列

print_r (searchArrayKey($userdb, 523465)); 
-1

试试这个关键,

$key = '102320'; 
foreach($userdb as $user){ 
    foreach($user['uid'] as $id){ 
     if($id[0] == $key)  
     { 
      echo "Match found--->".$key; 
     }  
    } 
} 

DEMO

我希望它会有帮助。

+0

其给予的价值不是关键 –

+0

@威廉弗朗西斯戈麦斯:感谢您的更新 – Dave