На ваш вопрос уже есть ответ:
if (isset($heystack[$var1][$var2][$var3]))
{
# do something...
}
Если вы не знаете, сколько у вас $var1 ... $varN
, вы можете сделать это только динамически, что включает в себя либо циклы, либо eval
и зависитесли вам нужно иметь дело со строковыми или числовыми ключами.Об этом уже спрашивали и отвечали:
Если вы беспокоитесь о скорости, например, если массив всегда один и тот же, но вам нужно часто запрашивать его, сначала создайте индекс, содержащий составные ключи, чтобы вам было проще его запрашивать.Это может быть сделано путем сохранения всех ключей при рекурсивном обходе массива:
class CompoundKeys extends RecursiveIteratorIterator
{
private $keys;
private $separator;
public function __construct($separator, RecursiveIterator $iterator, $mode = RecursiveIteratorIterator::SELF_FIRST, $flags = 0)
{
$this->separator = $separator;
parent::__construct($iterator, $mode, $flags);
}
public function current()
{
$current = parent::current();
if (is_array($current))
{
$current = array_keys($current);
}
return $current;
}
public function key()
{
$depth = $this->getDepth();
$this->keys[$depth] = parent::key();
return implode('.', array_slice($this->keys, 0, $depth+1));
}
}
Использование:
$it = new CompoundKeys('.', new RecursiveArrayIterator($array));
$compound = iterator_to_array($it, 1);
isset($compound["$var1.$var2.$var3"]);
В качестве альтернативы это может быть выполнено путем рекурсивного обхода и обращения к исходным значениям массивов:
/**
* create an array of compound array keys aliasing the non-array values
* of the original array.
*
* @param string $separator
* @param array $array
* @return array
*/
function array_compound_key_alias(array &$array, $separator = '.')
{
$index = array();
foreach($array as $key => &$value)
{
if (is_string($key) && FALSE !== strpos($key, $separator))
{
throw new InvalidArgumentException(sprintf('Array contains key ("%s") with separator ("%s").', $key, $separator));
}
if (is_array($value))
{
$subindex = array_compound_key_alias($value, $separator);
foreach($subindex as $subkey => &$subvalue)
{
$index[$key.$separator.$subkey] = &$subvalue;
}
}
else
{
$index[$key] = &$value;
}
}
return $index;
}
Использование:
$index = array_compound_key_alias($array);
isset($index["$var1.$var2.$var3"]);