رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دریافت json از فایل در php (حل شد)
#1
سلام
بنده اطلاعات را از یک آدرس میگیرم و در یک فایل با اسم 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 کدهایی رو پیدا و تست کردم ولی متاسفانه جواب نداد
ممنون میشم کمک کنید  Heart
پاسخ
تشکر شده توسط:
#2
$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

*/
پاسخ
تشکر شده توسط: amir76
#3
واقعا ممنون استاد
تشکر
پاسخ
تشکر شده توسط:
#4
استاد ببخشید انقد مزاحم میشم :D

الان من بخوام فقط admin رو برگردونم کد چطور میشه؟

ینی فقط در صفحه به من admin_name1 که مقدار admin رو نمایش بدم و دیگه admin2 رو نمایش نده
خیلی خیلی ممنون <3
پاسخ
تشکر شده توسط:
#5
به این صورت میتونین اون رو بخونین:
$values = json_decode($str);
echo $values->admin->{'1'}->name;
دقت کنید که خروجی json_decode یه شئ هست و نه یه آرایه و باید با -> به عناصر دسترسی پیدا کنین ولی چون اسامی فیلدها نمیتونه با عدد شروع بشه، هرجا عدد دیدین باید توی آکولاد بگذارین و عدد رو بصورت رشته اعلام کنید. مثل 1 که بصورت {'1'} اعلام میشه.
پاسخ
تشکر شده توسط:
#6
استاد تشکر
الان میخوام به عنوان مثال 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;
           }
       }
   ?>

واقعا ممنون که انقد با حوصله جواب میدین تشکر
پاسخ
تشکر شده توسط:
#7
دیگه نباید حلقه بگذارین. یکبار دستی وارد کنید وقتی کلیدها رو میدونین.
پاسخ
تشکر شده توسط:
#8
استاد یه سوال دیگه و تموم  Big Grin

ببیند این مثال بنده است که خدمتتون گفتم
{
 "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 های این گروه های کاربری رو برگردونم اما نمیدونم چجوری
بازم تشکر که تا اینجا کمک کردید  Heart
پاسخ
تشکر شده توسط:
#9
<?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
        )

)

*/

?>
پاسخ
تشکر شده توسط:
#10
واقعا ممنونم ازتون
الان برای برگردوندن supermoderator باید supermoderator رو به groups$ بدم دیگه...؟ مثلا "supermoderator"
واقعا گیج شدم :(
پاسخ
تشکر شده توسط:
#11
بله:
foreach($groups['supermoderator'] as $name) {
    echo '<p>' . $name . '</p>';
}

یا مثلاً برای تنظیم رنگ که میخواستین:
if (in_array($name, $groups['supermoderator'])) {
    $color = '#f00';
}
پاسخ
تشکر شده توسط:
#12
سلام مجدد  
عید پیامبرمون حضرت محمد مبارک

من میخوام عکس های کاربران رو هم بگیرم کدم رو به این صورت تغییر دادم...

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&amp;u=1&amp;dateline=1251657371"
}
},
"admin2": {
"": {
"name": "reza",
"link": "member.php?reza616651",
"thumb": "image.php?s=076cacc9042c0ed143d0369d4f8d0354&amp;u=268&amp;dateline=1484140714&amp;type=thumb"
}
},
"supermoderator": {
"": {
"name": "hosein",
"link": "member.php?hosein6489454654",
"thumb": "image.php?s=076cacc9042c0ed143d0369d4f8d0354&amp;u=1414814&amp;dateline=1492708694&amp;type=thumb"
}
},

از هر گروه کاربری فقط اولین شخص رو میگیره نه همش رو
ممنون  Shy
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان