#php #multidimensional-array
#php #многомерный-массив
Вопрос:
$array = array(
'the-1'=> array('name'=>'lorem','pos'=>array('top'=>'90','left'=>'80'),'zindex'=>2),
'the-2'=> array('name'=>'ipsum','pos'=>array('top'=>'190','left'=>'180'),'zindex'=>1),
'the-3'=> array('name'=>'lorem ipsum','pos'=>array('top'=>'20','left'=>'30'),'zindex'=>3)
);
Как проверить zindex
, существует ли ключ в приведенном выше массиве php.
Комментарии:
1. «Как проверить, что ключ zindex существует в приведенном выше массиве php» — просто где угодно / хотя бы один раз или вы хотите проверить, является ли каждый элемент $array а) массивом и б) имеет индекс / ключ
zindex
?
Ответ №1:
Для этого у вас есть метод с именем array_key_exists . Конечно, вам нужно выполнить некоторый (рекурсивный) цикл, если вы не знаете, насколько глубоко расположен массив со значением.
Ответ №2:
Возможно, вам следует использовать функцию array_walk_recursive таким образом
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function test_print($item, $key)
{
echo "$key holds $itemn";
}
array_walk_recursive($fruits, 'test_print');
?>
это всего лишь пример печати, взятый из php.net , но вы можете легко адаптировать его в соответствии с вашими потребностями (например, добавив array_key_exist в функцию обратного вызова).
Ответ №3:
Я не совсем уверен, чего вы здесь хотите, поэтому вот множество тестов, которые вы можете запустить на zindex. Все они используют цикл foreach и array_key_exists .
Если вы хотите проверить каждый элемент во внешнем массиве, чтобы увидеть, имеет ли он zindex:
Это перебирает каждый элемент и просто проверяет, имеет ли элемент какой-либо ключ zindex.
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) ) {
echo "Key '$key' has a zindex of ".$element['zindex']."n<br>n";
} else {
echo "Fail!! Key '$key' has no zindex!n<br>n";
}
}
Если вы просто ищете, чтобы вообще был какой-либо ключ zindex:
Это повторяется до тех пор, пока не будет найден элемент с zindex . Если найден zindex, функция возвращает true, в противном случае возвращает false.
function find_zindex( $array ) {
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) ) {
echo "Key '$key' has a zindex of ".$element['zindex']."n<br>n";
return true;
}
}
return false;
}
if( find_zindex( $array ) ) {
echo "A zindex was foundn<br>n";
} else {
echo "Fail: no zindex was foundn<br>n";
}
Если вы ищете определенное значение zindex в вашем массиве:
Это перебирает, ища конкретный zindex, который имеет определенное значение. Если он найден, то возвращается ключ для внешнего массива. В противном случае возвращается значение null.
function find_zindex( $array, $search_key ) {
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) amp;amp; $element['zindex']==$search_key ) {
echo "Key '$key' has a zindex of ".$element['zindex']."n<br>n";
return $key;
}
}
return null;
}
$key = find_zindex( $array, 3 );
if( $key ) {
echo "The zindex was found at '$key'n<br>n";
} else {
echo "Fail: the zindex was not foundn<br>n";
}
$key = find_zindex( $array, 4 );
if( $key ) {
echo "The zindex was found at '$key'n<br>n";
} else {
echo "Fail: the zindex was not foundn<br>n";
}
Если вам нужен массив каждого ключа, который имеет определенный zindex:
Это повторяется, создавая массив, содержащий каждый элемент, соответствующий заданному значению поиска zindex. По завершении он возвращает новый массив элементов. Если ничего не найдено, возвращается пустой массив, который будет проверяться как false.
function find_zindex( $array, $search_key ) {
$result = array();
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) amp;amp; $element['zindex']==$search_key ) {
echo "Key '$key' has a zindex of ".$element['zindex']."n<br>n";
$result[] = $key;
}
}
return $result;
}
$key = find_zindex( $array, 3 );
if( $key ) {
echo 'The zindex was found at:';
print_r( $key );
echo "n<br>n";
} else {
echo "Fail: the zindex was not foundn<br>n";
}
$key = find_zindex( $array, 4 );
if( $key ) {
echo 'The zindex was found at:';
print_r( $key );
echo "n<br>n";
} else {
echo "Fail: the zindex was not foundn<br>n";
}
Если вы часто пытаетесь найти данные с помощью zindex, вы захотите изменить дизайн своего массива:
Это создает второй массив, который просто содержит ссылки на элементы в первом массиве. Если вы запустите это, вы увидите, что данные являются общими, потому что одно назначение установит ‘name’ в ‘new_name’ в обоих массивах. Обратите внимание, что каждый элемент внешнего массива теперь имеет как индекс, так и zindex.
Предполагается, что каждый элемент в $array имеет zindex, а значение zindex уникально. Если некоторые элементы не имеют zindex или имеют повторяющиеся zindexes, вам нужно будет немного изменить это.
$array = array(
'the-1'=> array('name'=>'lorem','pos'=>array('top'=>'90','left'=>'80'),'index'=>'the-1','zindex'=>2),
'the-2'=> array('name'=>'ipsum','pos'=>array('top'=>'190','left'=>'180'),'index'=>'the-2','zindex'=>1),
'the-3'=> array('name'=>'lorem ipsum','pos'=>array('top'=>'20','left'=>'30'),'index'=>'the-3','zindex'=>3)
);
$zarray = array();
foreach( $array as amp;$value ) {
$zarray[$value['zindex']] =amp; $value;
}
// optional: order the entries in zarray by their key
ksort($zarray)
print_r($array);
echo "n<br>n";
print_r($zarray);
echo "n<br>n<br>n<br>n<br>n<br>n";
$array['the-1']['name']='new_name';
print_r($array);
echo "n<br>n";
print_r($zarray);