Установить переменную из функции array_map в PHP - PullRequest
0 голосов
/ 18 марта 2020

Я хочу установить значение $start_key из функции, вызываемой внутри функции array_map(). В приведенном ниже коде значение $start_key остается 0. Тем не менее, я могу напечатать значение из array_map.

$start_key = 0;
//Sample data
$array = array
  (
    array("id"=> "user-1", "name"=>"Rifas", "email"=>"email@gmail.com"),
    array("id"=> "user-12", "name"=>"Althaf", "email"=>"email@gmail.com"),
    array("id"=> "user-13", "name"=>"Farhan", "email"=>"email@gmail.com"),
    array("id"=> "user-101", "name"=>"Safwan", "email"=>"email@gmail.com")
  );

$mapped = array_map(
    function ($v, $k) {  
        if($v['id'] == "user-12"){  
            $start_key = $k;              
        }        
    }, $array, array_keys($array));

print($start_key);

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

Для того, что вы хотите сделать, array_search и array_column обеспечивают гораздо более простое решение:

$start_key = array_search('user-12', array_column($array, 'id'));
echo $start_key;

Демо на 3v4l .org

Если значение не найдено, $start_key будет false, что можно спутать со значением 0, поэтому убедитесь, что вы используете тест, подобный

if ($start_key !== false) {
    // found - do something 

чтобы проверить результат.

2 голосов
/ 18 марта 2020

Другой вариант - use, и, если вам нужно изменить значение - используйте по ссылке:

$mapped = array_map(
    function ($v, $k) use (&$start_key) {  
        if($v['id'] == "user-12"){  
            $start_key = $k;              
        }        
    }, $array, array_keys($array));

print($start_key);
...