以字符开头的数组键

时间:2012-12-03 21:34:09

标签: php

我有一个包含术语和定义的数组:

$myArray = array("apple" => "Fruit that grows ...", "car" => "Vehicle on four...");  

如何确定我的$ myArray中是否有以特定字母开头的单词,例如“c”代表汽车,并在我的ABC列表中通过循环生成的相应字母添加一个类:

foreach(range('A','Z') as $i) {
    echo '<div>'. $i .'</div>';
}

更新:

预期产出:

<div class="match">A</div>
<div>B</div>
<div class="match">C</div>

4 个答案:

答案 0 :(得分:1)

您需要比较您要输出的字符是否作为数组键中的第一个字符存在。与所有其他工作解决方案相比,它一遍又一遍地遍历整个数据阵列,使用一点准备应该使发生的事情更容易,更容易理解。

$myArray = array("apple" => "Fruit that grows ...", "car" => "Vehicle on four...", "cat" => "Meow");

// Prepare array keys
$keys = array_keys($myArray);
array_walk($keys, function(&$key){$key=mb_strtoupper(mb_substr($key,0,1));});
array_unique($keys);

foreach (range('A','Z') as $char) {
    if (in_array($char, $keys)) {
        echo "<div class='match'>".$char."</div>";
    } else {
        echo "<div>".$char."</div>";
    }
}

输出:

<div class='match'>A</div><div>B</div><div class='match'>C</div><div>D</div><div>E</div><div>F</div> ...

答案 1 :(得分:1)

很多方法可以给猫皮肤涂抹。这是一个:

$matches = preg_grep('/^[A-Z]/', array_keys($myArray));
foreach($matches as $i) {
    echo '<div>'. $i .'</div>';
}

那个人的情况很敏感。要匹配A-Z和a-z,请将 i 修饰符添加到正则表达式。

答案 2 :(得分:0)

$myArray = array('a' => 'dog', 'b' => 'cat');
// For each letter from A to Z, contained in $i
foreach (range('A','Z') as $i) {
    echo '<b>' . $i . '</b><br />'; // Output the letter

    // For each key/value pair of the array
    foreach ($myArray as $key => $element) {
        // If the first letter of the key is the letter, it matches
        // This matches both upper and lowercase
        if (in_array($key[0], array($i, strtolower($i)))) {
            echo '<div class="match">' . $element . '</div><br />';
        }
    }
    echo '<br />';
}

循环通过A - Z并检查每个键/值对以查看键是否以该字母开头(或其小写对应;它同时检查A和a)。

编辑:根据对问题的更新进行了更新

答案 3 :(得分:0)

尝试:

$arr = array("apple" => "Fruit that grows ...", "car" => "Vehicle on four...");   
foreach ($arr as $k => $v) {
 foreach(range('a','z') as $i ) {
 if (strpos($k, $i) === 0) 
  echo "<div class='match'>". $i .'</div>';
 else
   echo '<div>'. $i .'</div>';
 }
}