2011-09-29 110 views
0
$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數組中。在php多維關聯數組中關鍵搜索

+0

「如何檢查Z-索引鍵上面PHP數組存在」 - 隨便找個地方/至少一次或你想檢查是否$陣列中的每個元素是一個)的陣列和b)具有索引/鍵'zindex'? – VolkerK

回答

1

對此,您有一種稱爲array_key_exists的方法。當然,如果你不知道具有值的數組有多深,你需要做一些(遞歸)循環。

0

也許你應該以這種方式

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

使用此功能array_walk_recursive的是剛剛從php.net採取了打印的例子,但很容易就可以適應它,以滿足您的需求(增加在該array_key_exist回調函數,例如)

0

我不完全確定你在這裏想要什麼,所以這裏是你可以在zindex上運行的各種測試。這些全部使用foreach循環和array_key_exists

如果你想檢查外陣列中的每個項目,看它是否有一個Z-索引:

這個循環遍歷每個元素,並簡單地檢查,如果該元素具有某種形式的Z-索引關鍵。

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"; 
    } 
} 

如果你只是在尋找引起任何Z-索引鍵都:

此遍歷,直到找到具有Z-索引的元素。如果找到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"; 
} 

如果你正在尋找您的陣列在一個特定的Z-索引值:

這遍歷,尋找具有特定值的特定Z-索引。如果找到,則返回外部數組的鍵。否則返回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的每一個關鍵的數組:

這遍歷,構建包含每一個提供的Z-索引搜索值匹配元素的數組。完成後,它將返回新的元素數組。如果沒有找到,它將返回一個空數組,它將測試爲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"; 
} 

如果你經常試圖通過Z-索引查找數據,你將要重新設計你的陣列:

這將創建一個只擁有第一個數組中的元素引用第二個陣列。如果你運行這個,你可以看到數據是共享的,因爲這兩個數組中的一個賦值將'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 &$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);