дано [marks] => Array ( [10] => 6,7,10 [12] => 8,9,11 [36] => 7,1,12 [334] => 7,10,12 [777] => 6,9,10 ) array_keys($marks, 6) вернет 10, 777 , что в общем то верно. В то же время array_keys($marks, 10) ничего полезного не вернет, хотя ожидал 10,334,777. Получается, что ищет не по всему значению а только с начала этого значения. Как быть? В теории можно разбить каждый элемент на еще один массив и искать там. Если нашли - возвращаем ключ. Но это долго и глупо. Может есть какие-то другие варианты?
Объясняю поведение функции: PHP: <? '6,7,10' == 6; // true '6,7,10' == 10; // false php преобразует тип выражения слева в тип выражения справа PHP: <? echo intval('6,7,10'); // 6
Koc Это медвежья услуга от PHP. Нельзя искать (по крайней мере с помощью array_keys) среди значений, перечисленных через запятую. В твоем случае PHP просто приводит каждую из строк к числу (получается 6, 8, 7, 7, 6), поэтому такие результаты. Нет, не глупо, поскольку у тебя данные сформированы в неудобоваримом виде. Можно написать функцию-фильтр (лямбду) и скормить ее функции array_filter, все равно тебе наверняка понадобятся не только ключи, но и значения: PHP: <?php $search=10; $callback=create_function("\$a","return in_array($search,explode(',',\$a));"); $found=array_filter($marks,$callback);