سلام
بنده اطلاعات را از یک آدرس میگیرم و در یک فایل با اسم test.json ذخیره میکنم
حالا میخواهم از این فایل اطلاعات json رو بگیرم و نمایش بدم
محتویات فایل json به این صورت است:
"admin": {
"1": {
"name": "admin_name1",
"link": "member.php?..."
}
},
"admin2": {
"144": {
"name": "admin_name2",
"link": "member.php?..."
},
"268": {
"name": "admin_name3",
"link": "member.php?..."
}
},
که من توسط php میخوام مقدار name رو بگیرم و نمایش بدم...در سایت هایی مثل stackoverflow کدهایی رو پیدا و تست کردم ولی متاسفانه جواب نداد
ممنون میشم کمک کنید
$str = <<<EOT
{
"admin": {
"1": {
"name": "admin_name1",
"link": "member.php?..."
}
},
"admin2": {
"144": {
"name": "admin_name2",
"link": "member.php?..."
},
"268": {
"name": "admin_name3",
"link": "member.php?..."
}
}
}
EOT;
foreach(json_decode($str) as $item) {
foreach($item as $subItem) {
echo '<p>' . $subItem->name . '</p>';
}
}
/* Output:
admin_name1
admin_name2
admin_name3
*/
استاد ببخشید انقد مزاحم میشم :D
الان من بخوام فقط admin رو برگردونم کد چطور میشه؟
ینی فقط در صفحه به من admin_name1 که مقدار admin رو نمایش بدم و دیگه admin2 رو نمایش نده
خیلی خیلی ممنون <3
به این صورت میتونین اون رو بخونین:
$values = json_decode($str);
echo $values->admin->{'1'}->name;
دقت کنید که خروجی json_decode یه شئ هست و نه یه آرایه و باید با
-> به عناصر دسترسی پیدا کنین ولی چون اسامی فیلدها نمیتونه با عدد شروع بشه، هرجا عدد دیدین باید توی آکولاد بگذارین و عدد رو بصورت رشته اعلام کنید. مثل 1 که بصورت {'1'} اعلام میشه.
استاد تشکر
الان میخوام به عنوان مثال 144 رو برگردونم که admin_name2 رو برگردونه ولی ارور میده
و نکته دیگه اینکه اسم رو چندین بار تکرار میکنه من میخوام 1 بار نمایش بده فقط
<?php
$str = file_get_contents("test.json");
foreach(json_decode($str) as $item) {
foreach($item as $subItem) {
$values = json_decode($str);
echo $values->admin->{'144'}->name;
}
}
?>
واقعا ممنون که انقد با حوصله جواب میدین تشکر
دیگه نباید حلقه بگذارین. یکبار دستی وارد کنید وقتی کلیدها رو میدونین.
استاد یه سوال دیگه و تموم
ببیند این مثال بنده است که خدمتتون گفتم
{
"admin": {
"1": {
"name": "amir",
}
},
"admin2": {
"144": {
"name": "ali",
},
"268": {
"name": "reza",
}
},
"supermoderator": {
"172": {
"name": "hossein",
},
"1022791": {
"name": "alireza",
},
"158": {
"name": "sasan",
},
"135": {
"name": "eng",
},
"6754": {
"name": "moahmmad",
},
"211": {
"name": "saman",
}
},
که گروه های ما دسته بندی داره مثلا admin و admin2 و supermoderator
اینا هر کدوم یه رنگی دارن رنکشون مثلا شما رنگ رکتون سبز هست که مدیر کل هستید
من میخوام به هر گروه یه رنگ اختصاص بدم
کاری که میخوام بکنم این هست که بتونم کل name های گروه supermoderator رو نمایش بدم و بهشون رنگ آبی رو بدم
یا مثلا گروه admin2 که مدیران اصلی هستن رو سبز نمایش بدم...
مهم برام اینه که بتونم name های این گروه های کاربری رو برگردونم اما نمیدونم چجوری
بازم تشکر که تا اینجا کمک کردید
<?php
$str = <<<EOT
{
"admin": {
"1": {
"name": "amir"
}
},
"admin2": {
"144": {
"name": "ali"
},
"268": {
"name": "reza"
}
},
"supermoderator": {
"172": {
"name": "hossein"
},
"1022791": {
"name": "alireza"
},
"158": {
"name": "sasan"
},
"135": {
"name": "eng"
},
"6754": {
"name": "moahmmad"
},
"211": {
"name": "saman"
}
}
}
EOT;
$values = json_decode($str);
$groups = [];
foreach ($values as $key => $value) {
$groups[$key] = [];
foreach ($value as $item) {
$groups[$key][] = $item->name;
}
}
echo '<pre>' . print_r($groups, true) . '</pre>';
/* Output:
Array
(
[admin] => Array
(
[0] => amir
)
[admin2] => Array
(
[0] => ali
[1] => reza
)
[supermoderator] => Array
(
[0] => hossein
[1] => alireza
[2] => sasan
[3] => eng
[4] => moahmmad
[5] => saman
)
)
*/
?>
واقعا ممنونم ازتون
الان برای برگردوندن supermoderator باید supermoderator رو به groups$ بدم دیگه...؟ مثلا "supermoderator"
واقعا گیج شدم :(
بله:
foreach($groups['supermoderator'] as $name) {
echo '<p>' . $name . '</p>';
}
یا مثلاً برای تنظیم رنگ که میخواستین:
if (in_array($name, $groups['supermoderator'])) {
$color = '#f00';
}
سلام مجدد
عید پیامبرمون حضرت محمد مبارک
من میخوام عکس های کاربران رو هم بگیرم کدم رو به این صورت تغییر دادم...
foreach($active_box as $active){
$link = $active->find('a', 0)->href;
preg_match('/member.php?(d+)/', $link, $userid);
$thumb = $active->find('img', 0)->src;
preg_match('/image.php?(d+)/', $thumb, $userid);
$name = $active->find('span', 0)->innertext;
$avtive_array[$userid[1]] = array('name' => $name, 'link' => $link, 'thumb' => $thumb);
}
اما آدرس پروفایل همه کاربران رو نمیگیره...و فقط کاربر اول رو میگیره اما در هر دسته بندی 5 تا کاربر هست
خروجی json هم به این صورت
{
"admin": {
"": {
"name": "ali",
"link": "member.php?654864",
"thumb": "image.php?s=076cacc9042c0ed143d0369d4f8d0354&u=1&dateline=1251657371"
}
},
"admin2": {
"": {
"name": "reza",
"link": "member.php?reza616651",
"thumb": "image.php?s=076cacc9042c0ed143d0369d4f8d0354&u=268&dateline=1484140714&type=thumb"
}
},
"supermoderator": {
"": {
"name": "hosein",
"link": "member.php?hosein6489454654",
"thumb": "image.php?s=076cacc9042c0ed143d0369d4f8d0354&u=1414814&dateline=1492708694&type=thumb"
}
},
از هر گروه کاربری فقط اولین شخص رو میگیره نه همش رو
ممنون