PDA

View Full Version : نمایش آرایه



ماهان مقدم
جمعه 28 مرداد 1390, 02:31 صبح
سلام آقا من یه آرایه دارم به شکل زیر که می خوام در قالب زیر نمایشش بدم. در واقع داینامیک باشه چون من آرایه ام ثابت نیست. ممنون.


$arr = array('1','1:1','1:2','2','2:1');


<ul>
<li>1</li>
<li>
<ul>
<li>1</li>
<li>2</li>
</ul>
</li>
<li>2</li>
<li>
<ul>
<li>1</li>
</ul>
</li>
</ul>

mohsen6500
جمعه 28 مرداد 1390, 06:39 صبح
سلام دوست عزیز
منظورتون این بود؟

<?php
$arr = array('1','1:1','1:2','2','2:1');
?>
<ul>
<li><?php echo $arr[0]; ?></li>
<li>
<ul>
<li><?php echo $arr[1]; ?></li>
<li><?php echo $arr[2]; ?></li>
</ul>
</li>
<li><?php echo $arr[3]; ?></li>
<li>
<ul>
<li><?php echo $arr[4]; ?></li>
</ul>
</li>
</ul>

ماهان مقدم
جمعه 28 مرداد 1390, 16:34 عصر
نه. منظورم یه حلقه while یا از این infinitive function ها که هی تکرار میشن بود. چون امکانداره آرایه من تا چند سطح بره تو یعنی اینطوری بشه.

1:1:1:1
1:1:1:2

HamidTatalo
سه شنبه 01 شهریور 1390, 01:53 صبح
نه. منظورم یه حلقه while یا از این infinitive function ها که هی تکرار میشن بود. چون امکانداره آرایه من تا چند سطح بره تو یعنی اینطوری بشه.

1:1:1:1
1:1:1:2

اینطوری که از مطلب بالا متوجه شدم آرایه شما حتما دو سطحی هستش
روش های زیادی برای نوشتن این حلقه میتونه وجود داشته باشه , و اگه همینطور که نوشتین بصورت مرتب شده باشه که دیگه خیلی راحت تره
مثلا قطعه کد زیر :

$arr = array('1','1:1','1:2','2','2:1');

echo "<ul>";
foreach ($arr as $a){
$flag = strpos($a,':');
if($flag){
echo "<ul><li>".substr($a,$flag+1)."</li></ul>";
} else {
echo "<li>".$a."</li>";
}
}
echo "</ul>";
البته این رو هم بگم که این یه نمونه کد خیلی ساده هستش با توجه به مثالی که شما گفتید
میتونه خیلی پیچیده تر هم باشه واسه آرایه های غیر مرتب و یا چند سطحی که اگه لاطم داشتید میتونید بگید تا براتون بذارم
این رو هم خودتون میتونید کامل ترش کنید

ماهان مقدم
سه شنبه 01 شهریور 1390, 18:09 عصر
ممنون. ولی من گفتم که آرایه ام امکان داره 100 تا سطح داشته باشه باسه همین باید یه حلقه while باشه یا function های بی نهایت. sort هم هست در واقع من الآن خودم یه حلقه نوشتم که بره تمام مشخصات موجود رو جمع کنه و اینطوری تو یه آرایه ذخیره کنه فقط مشکلم نمایششون هست. حالت والد و فرزند هست. در واقع این همون منوی WordPress هست که میاد زیر هدر ولی من دارم برا خودم می نویسم.

HamidTatalo
چهارشنبه 02 شهریور 1390, 12:23 عصر
نه. منظورم یه حلقه while یا از این infinitive function ها که هی تکرار میشن بود. چون امکانداره آرایه من تا چند سطح بره تو یعنی اینطوری بشه.

1:1:1:1
1:1:1:2

دوست عزیز شما اول گفتی که امکان نداره چند سطحی بشه . واسه اینکه بشه چندین سطحی نوشت باید توضیح بیشتری بدی تا از ساختار آرایه بهتر اطلاع داشته باشم .
مثلا آرایه زیر رو در نظر بگیر
array('1','1:1','1:2','3','2','2:1','1:3','3:4','2 :2','1:2:3','1:1:1','2:3','2')
امکان داره آرایت به این شکل بشه ؟
اگه امکان داره این شکلی بشه ، این رو چطور قراره نشون بده ؟

ماهان مقدم
چهارشنبه 02 شهریور 1390, 21:43 عصر
سلام آقا من یه آرایه دارم به شکل زیر که می خوام در قالب زیر نمایشش بدم. در واقع داینامیک باشه چون من آرایه ام ثابت نیست. ممنون.

این همون چیزی که توی پست اول گفتم. گفتم آرایه ام ثابت نیست. آرایه ام sort هست همیشه. 1,1:1,1:2,2,2:1,1:1

این 1:1 یعنی اینکه میشه زیر مجموعه 2:1 که 1 عضو اول 2 هست. اینطوری.

HamidTatalo
پنج شنبه 03 شهریور 1390, 11:04 صبح
این همون چیزی که توی پست اول گفتم. گفتم آرایه ام ثابت نیست. آرایه ام sort هست همیشه. 1,1:1,1:2,2,2:1,1:1

این 1:1 یعنی اینکه میشه زیر مجموعه 2:1 که 1 عضو اول 2 هست. اینطوری.

دوست عزیز راستش رو بخوای من که اصلا متوجه نمیشم چیکار داری می کنی !!!
اصول کار اینه که شما فیلد پدر رو نگه داری قیل از آیتم
یعنی چی که 1:1 میشه عضو اول 2 ؟؟؟؟
خوب باید فیلد پدرت رو نگه داری . یعنی اینکه 2:1 که میشه عضو اول 2 !!!!!!

بعدشم . شما میگی آرایه من همیشه مرتب هستش ولی بالا مرتب نیست
و اینکه اگه مرتب هستش که شما نمی تونی اول عضو دوم رو بیاری بعدش عضو اول رو بیاری !!!!!
این روش تعریف کاملا اشتباهه واسه یه آرایه مثلا مرتب !!!

ماهان مقدم
پنج شنبه 03 شهریور 1390, 23:27 عصر
آقا بی خیال من خودم میفهمم چی نوشتم از کمکتون ممنون. منظورم از 1:1 آخرین فیلد این بود که این خونه عضو 1 در 2:1 که میشه فیلد قبلی هست. آرایه کاملا sortه.

MMSHFE
جمعه 04 شهریور 1390, 12:25 عصر
با سلام، لطفاً اين كد رو امتحان كنيد:


<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Array</title>
</head>
<body>
<?php
$arr = array('1', '1:A', '1:A:a', '1:A:b', '1:A:c', '1:B', '2', '2:A');

function arr_count($parent = '') {
global $arr;
$count = 0;
foreach($arr as $val) {
if($parent == '') {
if(strpos($val, ':') === false) {
$count++;
}
}
else {
if(strpos($val, $parent.':') === 0 && strpos($val, ':', strlen($parent) + 2) === false) {
$count++;
}
}
}
return $count;
}

function display($parent = '') {
global $arr;
$children = array();
if(arr_count($parent) > 0) {
if($parent != '') {
echo '<li>'."\n";
}
echo '<ul>'."\n";
foreach($arr as $val) {
$flag = false;
if($parent == '') {
if(strpos($val, ':') === false) {
$children[] = $val;
$flag = true;
}
}
else {
if(strpos($val, $parent.':') === 0 && strpos(substr($val, strlen($parent) + 1), ':') === false) {
$children[] = $val;
$flag = true;
}
}
if($flag) {
$value = $parent == '' ? $val : substr($val, strrpos($val, ':') + 1);
echo '<li>'.$value.'</li>'."\n";
if(arr_count($val) > 0) {
display($val);
}
}
}
echo '</ul>'."\n";
if($parent != '') {
echo '</li>'."\n";
}
}
}

display();

?>
</body>
</html>

اميدوارم به دردتون بخوره. موفق باشيد.

ماهان مقدم
جمعه 04 شهریور 1390, 18:55 عصر
آقا ممنون همون چیزی که میگفتم. من یه چیزی اینطوری در آورده بودم ولی نمیتونستم براش ul رو در بیارم. با space جداشون میکردم :لبخند: باز هم ممنون.