2015-09-30 7 views
-1

У меня есть функция, чтобы получить описание курьера, все записи, извлеченные из курьера, и хранятся в $couriers. $ courier - это двумерный массив, поскольку он содержит все строки курьеров.Как найти индекс по значению в двумерном массиве в php

[ 
{ 
"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" 
} 
] 

Теперь я должен принести Decription курьера, чей идентификатор дается. Для этой целью я должен знать индекс записей .. Я пробовал его с использованием 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;  
    } 
+0

, что делает ваш массив выглядит? –

+0

Приложите сюда свой массив образцов –

+0

Привет и приветствую вас, я настоятельно рекомендую вам взглянуть на [тур] (http://stackoverflow.com/tour), чтобы лучше понять, как работает SO и как чтобы написать свой вопрос, чтобы он получал наилучшие ответы, он может :) – Epodax

ответ

0

Вы переменная $ курьер не является массивом, это строка 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']; 
     } 
+0

спасибо, это дает тот же результат, который я хотел .. –

1

Попробуйте так легко использовать

$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 

Ваш переменные $ курьера изменить для Легко найти, который содержит такой массив:

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 
     ) 

) 
+0

спасибо большое –

0

Используйте этот

$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; 
} 
Смежные вопросы