|
|
|
| Ребят, я совсем новичок в php, стараюсь во всем разобраться, но вот описание учебника не поняла.
У меня такая задача:
Есть массив Х, в нем произвольное количество подмассивов N (по разному выдается из базы) в каждом подмассиве две переменные: A и B. Нужно превратить каждый подмассив в строчку:
Количество (переменная А) для (переменная В)
Строк столько же сколько массивов, строчки вывести все. Я догнала, что надо писать foreach, но не поняла как.
Не могли бы вы мне написать скелет форича для такой задачи, как шаблон, которым я бы потом пользовалась (такие задачи стоят постоянно), а то никак в длинных объяснениях не разберусь, а на примерах отлично все понимаю.
Спасибо за участие! | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:03)
| | пример массива привели бы:
//$arr = array( ........);
var_dump($arr);
|
а заодно и пример строк, которые нужно по нему получить. | |
|
|
|
|
|
|
|
для: Trianon
(10.12.2010 в 17:08)
| | Вот массив:
[ip] => Array
(
[0] => Array
(
[name] => 66.211.160.88
[count] => 39
[match] => 1
)
[1] => Array
(
[name] => 66.135.205.13
[count] => 39
[match] => 1
)
Вот строчка:
39 domains for ip 66.135.205.13 | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:14)
| |
<?
foreach($adr_list as $adr)
echo "--- " . $adr['count']. " domains for ". $adr['name']. " --<br/>";
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.12.2010 в 17:40)
| | А $adr_list - это что? | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:56)
| | это переменная, в которую Ваш бэкэнд вернул набор данных, который Вы называете массивом. | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:14)
| |
<?
$arr = array('ip' => array(
array('name' => '66.211.160.88', 'count' => 39, 'match' => 1),
array('name' => '66.135.205.13', 'count' => 39, 'match' => 1))
);
echo "<pre>";
array_walk($arr['ip'], create_function('&$v','$v = $v["count"] . " domains for ip " . $v["name"];'));
print_r($arr);
|
| |
|
|
|
|
|
|
|
для: sim5
(10.12.2010 в 17:43)
| | Дело в том, что эти вот массивы каждый раз разные, поэтому надо работать с ними именно как они есть не переназначать... | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:56)
| | Работайте, кто же вам запрещает. Вы говорите "превратить в строку" да пожайлуйста, делайте сразу вывод вместо присвоения. Разве дело в функциях?
Если они у вас постоянно разные, и разные это значит, что вы сами не знаете, что они из себя представляют, то тогда дело труба. | |
|
|
|
|
|
|
|
для: sim5
(10.12.2010 в 18:05)
| | Нет, я как бы знаю, есть бэкэнд, который в зависимости от запроса пользователя, берет из базы значения и присваивает их переменным. Вот эти переменные и массивы, в которых они лежат я показала. Но в статичном массиве этих подмассивов может быть 5, может быть 10, а может и не быть. Поэтому мне и нужна функия, которая, если массив не пустой, проходила бы по подмассивам и дергала оттуда значения переменных. | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 18:09)
| | Мадам, выражайтесь конкретнее, что значит "этих подмассивов может быть 5, может быть 10"? Если это число вложенных массивов элемента ip, то хоть 1000, вышеизложенный код как и просто обход foreach их обработает, и если нужна проверка на пустоту, то тоже нет проблем. Но если "этих подмассивов может быть 5, может быть 10", это вы о глубине вложения (что не похоже по примеру), то тем более вам в руки функции подобные array_walk, которые позволяют обойти массив рекурсивно. | |
|
|
|
|
|
|
|
для: sim5
(10.12.2010 в 18:16)
| | Нет не глубина, а именно число вложенных массивов.
Как тут использовать array_walk, Я ни разу с ним дела не имела. Я сосбственно сумела только проверять массив на пустоту. Дальше затык.
П.С. Между прочим, мадемуазель )))) | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 18:31)
| | >П.С. Между прочим, мадемуазель ))))
ну так отлично, значит проблема решится за секас ;) | |
|
|
|
|
|
|
|
для: psychomc
(10.12.2010 в 18:36)
| | Дистанционный в мозг пойдет? ) | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 18:45)
| | нененененене, его и так очень много) | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 18:31)
| | Как использовать array_walk... да по разному, как потребуется, хотя делать он может только одно, то есть вы можете вилкой есть, а можете использовать ее как миксер. ;-)
Вам лучше простой обход массива сделать, о чем уже писали ранее. Не знаю, что в вашем понимании пустой массив, но к примеру тут проверка ключа count, и если не пуст, то вывод:
<?
$arr = array('ip' => array(
array('name' => '1111', 'count' => 11, 'match' => 1),
array('name' => '2222', 'count' => 22, 'match' => 1),
array('name' => '3333', 'count' => 33, 'match' => 1),
array('name' => '4444', 'count' => 44, 'match' => 1),
array('name' => '5555', 'count' => '', 'match' => 1),
array('name' => '6666', 'count' => 55, 'match' => 1),
array('name' => '7777', 'count' => '', 'match' => 1),
array('name' => '8888', 'count' => 66, 'match' => 1),
array('name' => '9999', 'count' => 77, 'match' => 1))
);
foreach($arr['ip'] as $key) if($key["count"]) echo $key["count"] . " domains for ip " . $key["name"] . "<br>";
| Можете добавить в массив еще записей для проверки, убедитесь сами, что влиять на работу это не будет, кроме как на время обработки. | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:03)
| | судя по всему это
<?php
foreach ($x as $n) {
foreach ($n as $var) {
echo $var["a"]." ".$var["b"];
}
}
|
| |
|
|
|
|
|
|
|
для: psychomc
(10.12.2010 в 17:12)
| | Спасибо огромное, сейчас попробую применить! | |
|
|
|
|
|
|
|
для: psychomc
(10.12.2010 в 17:12)
| | Я с вышенаписанным массивом сделала так:
<? foreach($data->overview->overview->data->{0}->ip as $ip) {
foreach ($ip as $var) {
echo $var["count"]. " for ip " . $var["name"] . "<br/>";
} } ?>
|
Он работает, но берет какие-то интересные цифры непонятно откуда (
6 for ip 6
3 for ip 3
1 for ip 1 | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:32)
| | а вот эту портянку $data->overview->overview->data->{0}->ip вот прям так сразу в форич засовывать?
Может переменной сперва присвоить? var_dump поглядеть?
Уверен, что в ней Вы и напороли. | |
|
|
|
|
|
|
|
для: Trianon
(10.12.2010 в 17:43)
| | Это путь до массива, я что сделаю, если он такой матерый... там на принт_р этих массивов тысяча строк выпадает....
Как его к переменой присвоить?
И кстати эти вот смешные штуки:
6 for ip 6
3 for ip 3
1 for ip 1
путем наблюдения за массивом с целью понять: откудава? Выяснилось, что это первые цифры значений переменных в подмассивах. А почему не целиком и почему-то по три строки на массив а не по одной. | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 17:58)
| | это значит, что Вы
а) на один уровень вложенности промахнулись
б) применяете числовые ключи вместо символьных.
вытаскивая таким образом символы из строки, а не строки из массива.
б) помимо этого, означает, что Вы вводите нас в заблуждение. | |
|
|
|
|
|
|
|
для: Trianon
(10.12.2010 в 18:20)
| | а) уровни вложенности проверю.
б) не использую ничего кроме того, что вам показываю (
б) В чем бы? Что еще сказать? Я скажу без проблем, но вот этот кусок и эн массивов, в которые он вложен - это все, с чем я работаю ( | |
|
|
|
|
|
|
|
для: Мышара
(10.12.2010 в 18:35)
| | вот этот фрагмент
<? foreach($data->overview->overview->data->{0}->ip as $ip) {
foreach ($ip as $var) {
echo $var["count"]. " for ip " . $var["name"] . "<br/>";
} } ?>
|
...давайте разделим так:
<?
$list = $data->overview->overview->data->{0}->ip;
foreach($list as $ip) {
foreach ($ip as $var) {
echo $var["count"]. " for ip " . $var["name"] . "<br/>";
} } ?>
|
так вот, очень неплохо было бы показать начало $list.
Например, так:
$start = array_slice($list, 0, 5);
var_dump($start);
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.12.2010 в 18:55)
| | Он ругался, что массивом данные вывести не может.
<? foreach($data->overview->overview->data->{0}->ip as $ip):?>
<?= $ip->count;?> for ip <?= $ip->name; ?> <br/>
<? endforeach; ?>
|
Вот заработало! | |
|
|
|