如何搜索一个索引值在二维数组在php


How to search an index by value in two dimensional array in php

我有一个函数来获取快递的描述,所有关于快递的记录都存储在$couriers中。$courier是二维数组,因为它包含表courier的所有行。

[
{
"id":"1",
"name":"DTDC",
"description":"Automatically inserted by application ",
"bloked":"false"
},
{
"id":"2",
"name":"Ecomm",
"description":"Nothing",
"bloked":"false"
},
{
"id":"3",
"name":"MarginPrice",
"description":"Local only",
"bloked":"false"
}
]

现在,我必须获取描述的快递其id是给定的。为为此,我必须知道索引的记录。我试过了使用array_search,但"很难"。所以,我请求帮助给想法要知道数组

中记录的索引
 function getCourierDescriptionById($id)
    {   global $couriers;
        if($couriers==null)
        {
            loadCourier($id);
        }
        $index=array_search($id,$couriers);// Here is the problem
        return isset($couriers[$index]['description'])?
                                            $couriers[$index]['description']:null;      
    }

试试这样容易用

$j = '[
    {
    "id":"1",
    "name":"DTDC",
    "description":"Automatically inserted by application ",
    "bloked":"false"
    },
    {
    "id":"2",
    "name":"Ecomm",
    "description":"Nothing",
    "bloked":"false"
    },
    {
    "id":"3",
    "name":"MarginPrice",
    "description":"Local only",
    "bloked":"false"
    }
    ]';
    $arr = json_decode($j,true);
    $courier =array();
    foreach($arr as $sample){
        $courier[$sample['id']] = $sample;
    }
    //make sure your courier variable has id which you want to find "Its easy to search"
    function getCourierDescriptionById($id)
        {   global $courier;
            return isset($courier[$id])? $courier[$id]:null;      
        }
        print_r(getCourierDescriptionById(3));//function call which want to find

您的$courier变量已更改为易于查找,这是包含数组如下:

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => DTDC
            [description] => Automatically inserted by application 
            [bloked] => false
        )
    [2] => Array
        (
            [id] => 2
            [name] => Ecomm
            [description] => Nothing
            [bloked] => false
        )
    [3] => Array
        (
            [id] => 3
            [name] => MarginPrice
            [description] => Local only
            [bloked] => false
        )
)

你的$courier变量不是一个数组,它是一个json字符串,所以先对它进行dcode,这样它就变成了php数组。

$couriers = json_decode($couriers,true);
现在你的函数,可以定义如下,通过使用array_map
 function getCourierDescriptionById($id)
    {   global $couriers;
        $args=func_num_args();
        if($couriers==null)
        {
            loadCourier($id);
        }
        $index=array_search($id,array_map("getAllCourierId",$couriers));
        return isset($couriers[$index]['description'])?
                   $couriers[$index]['description']:null;       
    }

现在是下面的array_map约束的函数

 function getAllCourierId($arr)
        {
            return $arr['id'];
        }

使用

$jsonArray = '[
    {
    "id":"1",
    "name":"DTDC",
    "description":"Automatically inserted by application ",
    "bloked":"false"
    },
    {
    "id":"2",
    "name":"Ecomm",
    "description":"Nothing",
    "bloked":"false"
    },
    {
    "id":"3",
    "name":"MarginPrice",
    "description":"Local only",
    "bloked":"false"
    }
    ]';
    $arrData = json_decode($jsonArray,true);
    print_r(searchForId('3',$arrData,'id'));
function searchForId($id, $array,$field) {
   foreach ($array as $key => $val) {
       if ($val[$field] === $id) {
           return $val['description'];
       }
   }
   return null;
}