0

用語と定義を含む配列があります。

$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

4 に答える 4

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> ...
于 2012-12-03T21:44:06.297 に答える
1

その猫の皮を剥ぐ方法はたくさんあります。ここに1つあります:

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

それは大文字と小文字を区別します。AZ と az を一致させるには、正規表現にi修飾子を追加します。

于 2012-12-03T21:45:39.473 に答える
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 の両方) で始まるかどうかを確認します。

編集:質問への更新に基づいて更新

于 2012-12-03T21:43:18.307 に答える
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>';
 }
}
于 2012-12-03T21:46:43.290 に答える