Как получить равноправный ключ массива? - PullRequest
1 голос
/ 30 апреля 2020

Вот мой код :

<?php

$uriClass = 'dictionaries';
$uriMethod = 'quran';

$parent_of_table_code = array(11=>"islamic_sources",
                              12=>"islamic_sources",
                              65=>"dictionaries",
                              66=>"dictionaries");
$routes = array(11=>"quran",
                12=>"torat",
                65=>"quran",
                66=>"longman");

echo $table_code = array_search($uriMethod, $routes);

//=> 11

Как видите, результат 11, но Мне нужно получить 65, из-за родителя (dictionaries). array_search() возвращает первое совпадение, мне нужно, чтобы оно работало в соответствии с родителем. Есть идеи, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете использовать это

$table_code = array_keys( 
   array_intersect_key( $routes, $parent_of_table_code ), 
$uriMethod );

array_intersect_key возвращает ключи двух массивов $routes и $parent_of_table_code (которые одинаковы в обоих массивах). И из этого array_keys дает вам результат с ключами $uriMethod в качестве второго аргумента (который возвращает ключи, в которых $ uriMethod соответствует).

ОБНОВЛЕНИЕ $ table_code будет массивом, поэтому вместо $table_codes будет лучшим именем. Вы можете повторять и выводить каждый ключ, если хотите:

$table_codes = array_keys( 
   array_intersect_key( $routes, $parent_of_table_code ), 
$uriMethod );

foreach($table_codes as $key) {
    echo $key;
}
1 голос
/ 30 апреля 2020

Простой метод состоит в том, чтобы сначала найти все совпадения для одного из критериев (используя array_keys() со значениями для выбора), а затем проверить каждое совпадение с другим массивом, чтобы сопоставить второе значение ...

$matchedRoutes = array_keys($routes, $uriMethod);
foreach ( $matchedRoutes as $key )  {
    if ( $parent_of_table_code[$key] == $uriClass ) {
        echo $key;
        break;
    }
}

Существуют и другие методы, использующие только методы array_, но это только минимальные проверки.

Обновление:

Вы можете уменьшить это до 1 л. oop и проверить все без методов массива вообще ...

foreach ( $routes as $key => $route )  {
    if ( $route == $uriMethod && $parent_of_table_code[$key] == $uriClass ) {
        echo $key;
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...