$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)
);
How to check
zindex
key exist in above php array.
你有一个名为 array_key_exists 的方法。当然,如果您不知道具有值的数组的位置有多深,则需要进行一些(递归)循环。
也许你应该以这种方式使用 array_walk_recursive 函数
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
array_walk_recursive($fruits, 'test_print');
?>
这只是一个取自 php.net 的打印示例,但您可以轻松地调整它以满足您的需要(例如,在回调函数中添加 array_key_exist)
我不完全确定你在这里想要什么,所以这里有各种你可以在 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 found\n<br>\n";
} else {
echo "Fail: no zindex was found\n<br>\n";
}
如果您要在数组中查找特定的 zindex 值:
循环遍历,寻找具有特定值的特定 zindex。如果找到,则返回外部数组的键。否则返回 null。
function find_zindex( $array, $search_key ) {
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) && $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 found\n<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 found\n<br>\n";
}
如果你想要一个包含特定 zindex 的每个键的数组:
循环遍历,构建一个数组,其中包含与提供的 zindex 搜索值匹配的每个元素。完成后,它返回新的元素数组。如果未找到任何内容,它将返回一个空数组,该数组将测试为 false。
function find_zindex( $array, $search_key ) {
$result = array();
foreach( $array as $key => $element ) {
if( array_key_exists('zindex',$element) && $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 found\n<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 found\n<br>\n";
}
如果你经常尝试通过 zindex 查找数据,你将需要重新设计你的数组:
这将创建第二个数组,该数组仅引用第一个数组中的元素。如果你运行这个,你可以看到数据是共享的,因为一个赋值会将两个数组中的 'name' 设置为 'new_name'。请注意,外部数组的每个元素现在都有一个索引和一个 zindex。
这假设 $array 中的每个元素都有一个 zindex 并且 zindex 的值是唯一的。如果某些元素没有 zindex 或者有重复的 zindex,那么你将需要修改一些。
$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 &$value ) {
$zarray[$value['zindex']] =& $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);
这是我的解决方案:
function find_value_by_key($key,$array) {
$data = array('key'=>$key,'ret'=>false);
array_walk_recursive($array,function($v,$k) use (&$data) {
if ($data['ret'])
return;
if ($k==$data['key'] and $v)
$data['ret'] = $v;
},$data);
return $data['ret'];
}
在这种情况下,它返回它找到的第一个值(在您的情况下,它会在搜索
2
时返回"zindex"
),如果您需要数组中返回的所有值,您可以使用此函数:
function find_value_by_key($key,$array) {
$data = array('key'=>$key,'ret'=>array());
array_walk_recursive($array,function($v,$k) use (&$data) {
if ($k==$data['key'] and $v)
$data['ret'][] = $v;
},$data);
return $data['ret'];
}
这将返回
[2,1,3]