php: is_array

2354570

Вот допустим, мне надо сделать так.
$a['field1'][<некоторая строка, заранее неизвестная>]['field2'][<ещё одна какая-то строка>] = x;
Почему is_array($a['field1']) - FALSE?

sinet

Запости весь кусок кода. У тебя где-то в нём ошибка.

Werdna

потому что у тебя не массив, а хэш!
Знаешь что в ПХП нет никакого средства контроля хэш у тебя или массив?

Barbie29

хеш хешей хешей хешей походу даже

artimon

В PHP нет разницы между ними. Можешь считать, что в PHP есть только „упорядоченные хеши“ (и не надо говорить, что хеш по определению не упорядочен).

artimon

А почему он должен быть true? Он вообще определён?
Код в студию.

2354570

+1

2354570

Он должен быть true, потому что
$a['field1']
сам по себе является массивом/хэшем (в php-ном понимании этого слова).
Дело в том, что я передаю этот массив в функцию. Там надо проверить, является ли $a['field1'] массивом и если да - то не пустым, а уже потом пробежаться по элементам при помощи foreach.
Ну примерный код:
$a['field1']['foo1']['field2']['foo1'] = 'x';
$a['field1']['foo2']['field2']['foo5'] = 'y';
дальше вызов функции
func($a);
А уже в ней я предполагаю такую проверку:
if (is_array($a['field1']) && count($a['field1']
{
foreach($a['field1'] as $k => #v)
........
}
В цикл мы не попадаем, потому что is_array - FALSE.
По поводу декларирования - вот я не знаю, как такую структуру корректно задекларировать и можно ли это сделать вообще. Когда объявляется массив, ключи указываются явно, а тут второй ключ заранее неизвестен. Т.е.
$a = array(
'field1' => array(
<что писать здесь?> => array(
'field2' => array(
)
)
)
);

bansek

Гонишь =)
<?

$a['field1']['foo1']['field2']['foo1'] = 'x';
$a['field1']['foo2']['field2']['foo5'] = 'y';


func($a);


function func($a) {

if (is_array($a['field1']) && count($a['field1'] {
print "in";
} else {
print "out";
}
}


?>

http://execmba.ru/test1.php

2354570

А у меня false

bansek

ты запускаешь именно тот код, что я привел? Попробуй запустить именно этот кусок кода.
у меня пхп4

2354570

А, всё, нашёл ошибку, спасибо.

2354570

Кстати, раз уж речь о многомерных массивах пошла, ещё такой вопрос (туплю).
Пусть есть такая структура:
$a['elem'][0]['weight'] = 1;
$a['elem'][1]['weight'] = 2;
Как грамотнее всего отсортировать этот массив по полю 'weight' по убыванию?
Чтобы стало:
$a['elem'][0]['weight'] = 2;
$a['elem'][1]['weight'] = 1;

kruzer25

Учимся читать мануалы
function cmp($a, $b) 
{
if ($a['weight'] == $b['weight']) {
return 0;
}
return ($a['weight'] < $b['weight']) ? -1 : 1;
}

$a=Array;
$a['elem'][0]['weight'] = 1;
$a['elem'][1]['weight'] = 2;

usort($a, "cmp");
Оставить комментарий
Имя или ник:
Комментарий: