2011-12-20 4 views
1

У меня есть следующий массив:значения Найти и ключ в многомерном массиве

Array ( 
    [0] => Array ( 
     [word] => 1 
     [question] => php 
     [position] => 11 
    ) 
    [1] => Array ( 
     [word] => sql 
     [question] => 1 
     [position] => 22 
    ) 
) 

Мне нужно найти, если [положение] => 22 существует в моем массиве и сохранить путь массива для дальнейшего использования. Спасибо.

+0

Что вы пробовали? На этом сайте есть много сообщений, посвященных многомерным массивам, и они должны иметь возможность по крайней мере начать работу, если вы этого не сделали. – jprofitt

+0

вам нужен путь или значение? –

ответ

1

Вы можете попробовать этот код:

$array = array 
( 
    array ( 
     "word" => 1, 
     "question" => php, 
     "position" => 11 
    ), 
    array ( 
     "word" => sql, 
     "question" => 1, 
     "position" => 22 
    ) 
); 

foreach($array as $item) 
{ 
    foreach($item as $key=>$value) 
    { 
     if($key=="position" && $value=="22") 
     { 
      echo "found"; 
     } 
    } 
} 
+0

Я думаю, что это не сработает, если у него был массив с 3 уровнями глубины. –

+0

Извините, он изменил вопрос, когда писал –

+0

@MarcoPace это нормально – hungneox

0

Сначала проверьте, существует ли ключ, используя isset, а затем, если ключ существует, убедитесь, что значение равно вашему значению сравнения.

Редактировать: Я пропустил, что было два массива. Чтобы решить эту проблему, выполните итерацию по каждому массиву и выполните проверку в каждом цикле. Если проверка положительная, вы знаете, какой массив это, глядя на текущий индекс.

0

Я думаю, что нет никакого другого решения, чем перебрать массив проверить, есть ли ключ «позиция» и значение «22»

3

Пример кода для решения «Ancide».

$found = false; 

foreach ($array as $array_item) { 
    if (isset($array_item['position'] && $array_item['position'] == "22")) { 
     $found = true; 
     break; 
    } 
} 
+1

только некоторая ошибка в коде, должна быть 'if (isset ($ array_item ['position']) && $ array_item ['position '] == "22") ' – electroid

+0

Согласен! thanks;) – AndVla

0

Try с помощью этой функции:

function findKey($array, $mykey) { 
    if(array_key_exists($mykey, $array)) 
     return true; 

    foreach($array as $key => $value) { 
     if(is_array($value)) 
      return findKey($value, $mykey); 
    } 

    return false; 
} 

if(findKey($search_array, 'theKey')) { 
    echo "The element is in the array"; 
} else { 
    echo "Not in array"; 
} 
+1

Добавил это, если кому-то нужен какой-то уровень глубины. –

0

Попробуйте это:

function exists($array,$fkey,$fval) 
{ 
foreach($array as $items) 
{ 
    foreach($items as $key => $val) 
    if($key == $fkey and $val == $fval)return true; 
} 
return false; 
} 

Пример:

if(exists($your_array,"position",22))echo("found");

0

Это позволит решить вашу проблему:

<?php 

foreach ($array as $k => $v) { 
    if(isset($v['position']) && $v['position'] == 22) { 
    $key = $k; 
    } 
} 
echo $key; 

//$array[$key]['position'] = 22 

?> 
0
function findPath($array, $value) { 
    foreach($array as $key => $subArray) if(subArray['position'] === $value) return $key; 
    return false; // or whatever if not found 
} 


echo findPath($x, 22); // returns 1 


$x= Array ( 
    [0] => Array ( 
     [word] => 1 
     [question] => php 
     [position] => 11 
    ) 
    [1] => Array ( 
     [word] => sql 
     [question] => 1 
     [position] => 22 
    ) 
) 
Смежные вопросы