2016-06-27 8 views
0

Я изучаю php, пожалуйста, помогите.Как назначить id на основе значений массива

Я хранение значений в массиве, а затем я пытаюсь получить идентификатор другого массива проверки значения в массиве, как это:

$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; 

Как я могу проверить значение массивов динамически. Я имею в виду, что хочу проверить, существует ли значение в массиве, а затем назначить их идентификатор.

+0

Вы можете использовать in_array() функцию, чтобы исправить это –

+0

* «Я имею в виду, я хочу, чтобы проверить, если значение существует ** в массиве ** затем присвоить их идентификатор» * <- Там вы идете – Rizier123

+0

не могли бы вы предоставить фиктивные данные массивом, тогда я бы подготовил для вас пример. –

ответ

0

Вам необходимо использовать 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'] не содержит пробелы или любые другие символы, которые не разрешается объявлять имена переменных.

+0

Спасибо. Мне нужна еще одна помощь. У меня есть черта в значении arr_folders, например. независимо-там. теперь $ {'id _'. $ value ['name']} вызовет проблему. Как я могу использовать? – user3556802

+0

вы можете заменить символы подчеркивания во время выполнения, например 'str_replace ('-', '_', $ value ['name'])' –

+0

Как я могу разбить сохраненные переменные в массив? Я имею в виду $ id_one, $ id_two, .... – user3556802

0

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

Например:

<?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; 
0

Если я правильно понял вопрос, вы спрашиваете, как вы можете проверить содержимое одного массива (в данном случае, [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]; 

Там может быть другим, более элегантным или во время effficient решения, но я думаю, что это отражает динамичный характер, который вы ищете в то время как зеркальном отображение реального процесса предыдущий код.

0

здесь приведен пример кода:

<?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); 
?>