Я изучаю php, пожалуйста, помогите.
Я храню значения в массиве, а затем я пытаюсь получить идентификатор другого массива, проверяя значение в массиве следующим образом:
$arr_folders = ['one', 'two', 'whatever']; $id_one = ''; $id_two = ''; $id_whatever = ''; foreach ($tree as $key => $value) { if($value['name'] == 'one'){//how to check dynamically? $id_one = $value['id']; } if($value['name'] == 'two'){//how to check dynamically? $id_two = $value['id']; } if($value['name'] == 'whatever'){//how to check dynamically? $id_whatever = $value['id']; } } echo $id_whatever;
Как я могу проверить значения массивов динамически. Я имею в виду, что хочу проверить, существует ли значение в массиве, а затем назначить их идентификатор.
Вам нужно использовать in_array
чтобы проверить, существует ли этот элемент в другом массиве, и если он найден, вы можете создать динамическую переменную, основанную на $value['name']
содержащую $value['id']
мере необходимости.
$tree = [ ['id' => 1, 'name' => 'one'], ['id' => 2, 'name' => 'two'], ['id' => 3, 'name' => 'three'] ]; $arr_folders = ['one', 'two', 'whatever']; foreach ($tree as $key => $value) { if (in_array($value['name'], $arr_folders)) { ${'id_'.$value['name']} = $value['id']; } } echo $id_one;
Рабочий пример: https://eval.in/596034
Примечание: убедитесь, что $value['name']
не содержит пробелов или других символов, которым запрещено объявлять имена переменных.
Попробуйте использовать поиск массива
Например:
<?php $arr_folders = ['one', 'two', 'whatever']; foreach ($tree as $key => $value) { if (($key = array_search($arr_folders, $value)) !== false) { return $arr_folders[$key]; } } echo $id_whatever;
Если я понимаю вопрос, вы спрашиваете, как вы можете проверить содержимое одного массива (в данном случае [one, two, whatever]
) в середине цикла через другой массив без жесткого кодирования. Если это так, я могу попробовать что-то вроде этого:
$arr_folders = ['one', 'two', 'whatever']; $id_folders = ['', '', ''] foreach ($tree as $key => $value) { foreach ($arr_folders as $fkey => $fvalue) { // f for folder, in this case if($value['name'] == $fvalue){ $id_folders[$fkey] = $value['id']; } } } echo $id_folders[2];
Могут быть и другие, более элегантные или эффективные по времени решения, но я думаю, что это отражает динамический характер, который вы ищете, при этом отражая фактический процесс предыдущего кода.
вот пример кода:
<?php $arr_folders = ['one', 'two', 'whatever']; $tree= Array(Array('id' => 1,'name' => 'one'), Array('id' => 2,'name' => 'large'), Array('id' => 3,'name' => 'thumb'), Array('id' => 4,'name' => 'two'), Array('id' => 5,'name' => 'large'), Array('id' => 6,'name' => 'thumb') ); foreach ($tree as $key => $value) { if(in_array($value['name'],$arr_folders)){ $searchedIds[] = $value['id']; } } print_r($searchedIds); ?>