• Php در آرایه برای بخشی از یک مقدار جستجو کنید. PHP array_search: جستجوی یک مقدار در یک آرایه. حذف عناصر از یک آرایه

    برنامه نویسی در مورد نحو و معناشناسی است. اولی توسط قوانین زبان تعیین می شود، دومی - با تجربه توسعه دهنده. با توجه به آرایه‌ها، توسعه‌دهنده می‌تواند به طور نامحسوس نحو را با معنایی بارگذاری کند. هنوز یک شی نیست، اما دیگر یک آرایه به معنای سنتی نیست. PHP به شما امکان می دهد آرایه هایی را از متغیرهای مختلف، از جمله خودتان، ایجاد کنید. یک عنصر آرایه می تواند یک تابع باشد، یعنی توانایی بارگذاری آرایه با یک الگوریتم واقعی، معنای واقعی.

    نحو پایدار است، اما از نسخه ای به نسخه دیگر تغییر می کند و ممکن است همیشه حتی از پایین به بالا سازگار نباشد. قابل حمل بودن برنامه یک دستاورد فراموش شده قرن گذشته است. معناشناسی در حال تکامل است و همیشه می تواند نه تنها در هر نسخه از هر زبانی اعمال شود. استفاده از ساختارهای نحوی برای بیان آنچه حتی در قواعد زبان پیش بینی نشده بود به یک سنت تبدیل شده است. با استفاده از مثال آرایه ها، این را می توان به سادگی درک کرد.

    ساخت آرایه

    یک آرایه در PHP دارای نحو و عملکرد مناسبی است. این یکی را می توان از قبل توضیح داد، اما اغلب راحت است که در صورت نیاز آرایه ها را در پرواز ایجاد کنید.

    public $aNone = array(); // آرایه شرح داده شده است و هیچ چیزی در آن وجود ندارد

    public $aFact = array("آووکادو"، "هلو"، "گیلاس"); // این آرایه سه عنصر دارد

    ایجاد یک آرایه در حین بررسی یک شرط:

    $cSrcLine = "خط داده های تجزیه شده";

    برای ($i=0; $i<13; $i++) {

    if (checkFunc($cSrcLine, $cUserLine) (

    $aResult = "بله"; // به آرایه PHP اضافه کنید

    $aResult = "نه";

    در نتیجه اجرای این مثال، آرایه ای متشکل از 13 عنصر ایجاد می شود که مقادیر آنها فقط رشته های "بله" یا "خیر" خواهد بود. عناصر از 0 تا 12 ایندکس می شوند. همین اثر را می توان با نوشتن آرایه PHP "future" در یک رشته به دست آورد:

    $cFutureArray = "";

    برای ($i=0; $i<13; $i++) {

    $cUserLine = inputUserLine(); // چیزی را وارد کنید

    if ($i > 0) ($cFutureArray .= "|"؛ )

    if (checkFunc($cSrcLine, $cUserLine) ( $cFutureArray .= "بله";

    ) else ($cFutureArray .= "نه"؛ )

    $aResult = explode("|", $cFutureArray);

    آرایه های چند بعدی

    بسیاری از سیستم‌های مدیریت محتوا (CMS) از آرایه‌ها به‌طور گسترده استفاده می‌کنند. از یک طرف، این یک عمل خوب است، از طرف دیگر، آن را دشوار می کند. حتی اگر نویسنده دکترین "آرایه PHP در یک آرایه" را درک کند، نباید از آن سوء استفاده کرد: نه تنها توسعه دهنده باید به نمادهای پیچیده عادت کند. اغلب، پس از مدتی، خود خالق برای مدت طولانی آنچه را که در ابتدا نوشته بود به یاد می آورد:

    "view_manager" => آرایه(41، "template_path_stack" => آرایه(__DIR__. "/../view")،

    "router" => array("routes" => array("sayhello" => array(

    "type" => "Zend\Mvc\Router\Http\Literal"،

    "options" => array("route" => "/sayhello", "defaults" => array(

    "controller" => "Helloworld\Controller\Index"، "action" => "index"))))))))

    "controllers" => array("invokables" => array(

    "Helloworld\Controller\Index" => "Helloworld\Controller\IndexController"))

    این تمرین نمونه آرایه در آرایه پی اچ پی ZF 2 است. در ابتدا خیلی الهام بخش نیست، اما کار می کند و احتمالاً این چارچوب را موفق می کند (مثالی از ماژول ZendSkeletonApplication/module/Helloworld/config/module.config.php).

    آرایه یک ساختار داده مهم در طول طراحی و توسعه است. نوع چند بعدی آن زمانی محبوب بود، اما با گذشت زمان، نیاز به آرایه های حداکثر دو یا سه بعدی باقی ماند. به این ترتیب ساده تر و واضح تر است، و از نقطه نظر حرفه ای بودن، وقتی چیزی شروع به تکثیر می کند، به این معنی است که چیزی در بیان مسئله یا کد اشتباه است.

    ساده، در دسترس و قابل فهم

    هنگام ایجاد یک آرایه در یک آرایه در php، بهتر است خود را به دو یا سه سطح محدود کنید. علیرغم پایداری و قابلیت اطمینان PHP، در پردازش ساختارهای نحوی خطاهایی ایجاد می کند. اگر یک ویرایشگر کد خوب دارید، می توانید این را تحمل کنید و به شمارش دقیق براکت ها و کاماها عادت کنید. با این حال، PHP انواع داده ها را کنترل نمی کند (این کارما برنامه نویسی مدرن است) و به توسعه دهنده اجازه می دهد تا خطاهای معنایی را تمرین کند.

    قاعده کنترل انواع متغیرها یا ایده‌های خود فرد مبنی بر تبدیل معناشناسی به نحو اغلب یک تجمل غیرقابل قبول است. این از دست دادن سرعت اسکریپت، خوانایی کد و ... است زیرا سادگی در کدنویسی همیشه ضروری است.

    PHP یک ویژگی منفی قابل توجه دارد: هنگامی که یک ابهام رخ می دهد، اسکریپت به سادگی هنگ می کند. همه دیباگرها شرایط پیش بینی نشده را مدیریت نمی کنند و خیلی به تجربه و شهود توسعه دهنده بستگی دارد. هرچه الگوریتم ساده‌تر باشد، ساختار اطلاعات در دسترس‌تر باشد، احتمال پیدا کردن خطا یا عدم وجود آن بیشتر است.

    مشخصه این است که وقتی اولین آرایه ها ظاهر شدند، انواع داده ها به شکل ساختارها پیشنهاد شدند - تلاشی ناشیانه برای ایجاد چیزی از انواع داده های مختلف. اولی زنده ماند و نحو کارآمد جدیدی به دست آورد، دومی در تاریخ ماندگار شد.

    آرایه های ساده و انجمنی

    یک ورودی آرایه دو بعدی یک جفت دیگر از براکت‌های "[" و "] است، به عنوان مثال: $aSrcData به عنصری از آرایه اشاره دارد که در آرایه $aSrcData قرار دارد. در PHP هیچ الزامی برای اعلام اطلاعات از قبل وجود ندارد. هر اطلاعات اعلام شده همیشه می تواند وجود داشته باشد.

    بسیار کارآمد است که چیزی را فقط در زمانی که نیاز است، به شکلی که به آن نیاز است، بسازیم و زمانی که دیگر به آن نیازی نیست، آن را از بین ببریم. با استفاده از نام های معنی دار به عنوان کلیدها (شاخص ها)، می توانید ساختارهای قابل خواندنی را دریافت کنید که در زمینه مکان فعلی در الگوریتم معنی دارند:

    $aAnketa["name"] = "ایوانف";
    $aAnketa["سن"] = 42;
    $aAnketa["work"] = "کارگردان";
    $aAnketa["active"] = درست است;
    $aTable = $aAnketa;

    $aAnketa["name"] = "پتروف";
    $aAnketa["سن"] = 34;
    $aAnketa["work"] = "مدیر";
    $aAnketa["active"] = درست است;
    $aTable = $aAnketa;

    $aAnketa["name"] = "افناسیف";
    $aAnketa["سن"] = 28;
    $aAnketa["work"] = "کارگر";
    $aAnketa["active"] = نادرست;
    $aTable = $aAnketa;

    $sOne .= implode ("; ", $aTable) . "
    "؛ // دومین آرایه PHP در یک رشته
    $sOne .= $aTable["work"]; // دسترسی به یک عنصر از آرایه دوم

    نتیجه این مثال (آرایه اول عادی است، کلیدهای موجود در آن از 0 شروع می شوند، آرایه دوم انجمنی است، دارای چهار کلید است: "نام"، "سن"، "کار"، "فعال"):

    $sOne = "Petrov؛ 34؛ مدیر؛ 1
    مدیر"؛

    در این مثال ساده می توانید ببینید که چگونه می توان پرسشنامه ایجاد شده را برای همه کارکنان اعمال کرد. می‌توانید آرایه‌ای از کارمندان را با نمایه‌ها بر اساس شماره پرسنل ایجاد کنید و در صورت نیاز به کارمند خاصی، او را با شماره پرسنل انتخاب کنید.

    اگر سازمان دارای زیرمجموعه هایی است یا کارگران فصلی وجود دارد یا باید بازنشستگان شاغل را از هم جدا کنید، ... ساخت "آرایه PHP-in-array" بسیار راحت است، اما هرگز نباید از ابعاد آن غافل شوید. دو یا سه بعدی حد یک راه حل موثر است.

    کلیدهایی برای کار با آرایه ها

    اگر قبل از این مهم بود که همه چیز چگونه کار می کند، پس در سال های آخر دوران باینری، زمانی که برنامه نویس می خواست دقیقاً بداند که عناصر آرایه چگونه ذخیره می شوند و می خواستند به آنها دسترسی مستقیم داشته باشند، کاملاً فراموش شدند. بسیاری از رمزگذاری کاراکترها ظاهر شده اند که بیش از یک بایت در حافظه اشغال می کنند. کلمه "bit" اکنون فقط در عملیات جستجوی بیت یافت می شود، اما جستجو در یک آرایه PHP یک موضوع جداگانه است. دسترسی به عناصر می تواند ساده و تداعی کننده باشد. در حالت اول، عناصر آرایه (دارای هر یک از انواع موجود در PHP) با شماره های 0، 1، 2، ... در حالت دوم، برنامه نویس شاخص خود را مشخص می کند که اغلب برای دسترسی به "کلید" نامیده می شود. مقدار مورد نظر

    $aLine["fruit"] = "نارنجی"; // اینجا کلید آرایه پی اچ پی = "میوه"

    یا (برای اینکه همه چیز درست باشد، با توجه به رمزگذاری صفحه و کد):

    $aLine = iconv("UTF-8"، "CP1251"، "نارنجی");

    هنگام اضافه کردن یک مقدار جدید به آرایه $aLine:

    $aLine = iconv("UTF-8"، "CP1251"، "هلو");
    $aLine = iconv("UTF-8"، "CP1251"، "خیار");
    $aLine = iconv("UTF-8"، "CP1251"، "بادمجان");

    در نتیجه حلقه:

    foreach ($aLine به عنوان $ck => $cv) (
    $cOne .= $ck . "=" . $cv . "
    ";
    }

    دریافت خواهد کرد:

    میوه = پرتقال
    0=هلو
    سبزی = خیار
    1 = بادمجان

    PHP-کلید آرایه هنگام اضافه کردن عناصر "هلو" و "بادمجان" به ترتیب از 0 تشکیل می شود و وقتی مقدار آن را مشخص کنید برابر با این مقدار خواهد بود.

    حذف عناصر از یک آرایه

    ساده ترین راه در طول پردازش آن است. در این حالت، به عنوان مثال، در نتیجه اجرای حلقه، آرایه اصلی اسکن می شود و یک آرایه جدید تشکیل می شود که در آن عناصر غیر ضروری به سادگی نوشته نمی شوند.

    شما می توانید آن را راحت تر انجام دهید. اگر برای مثال آخر اعمال شود:

    unset($line); // حذف عنصر از آرایه PHP

    سپس نتیجه این خواهد بود:

    میوه = پرتقال
    سبزی = خیار
    1 = بادمجان

    گزینه های زیادی برای دستکاری عناصر آرایه وجود دارد. به عنوان مثال، با استفاده از توابع: implode() و explode()، می توانید یک آرایه PHP را در یک رشته با یک جداکننده بنویسید و با استفاده از یک جداکننده دیگر آن را در آرایه دیگری تجزیه کنید.

    برای حذف ساده کل آرایه در PHP، فقط بنویسید: unset($aLine);

    بس است.

    جستجوی آرایه

    PHP توابع جستجو و in_array() ویژه ای را ارائه می دهد، اما قبل از تصمیم به استفاده از آنها، باید جستجوی آرایه PHP خود را در نظر بگیرید.

    هر پروژه ای یک آرایه ساخته شده خاص است، به خصوص زمانی که بخشی از معنایی به نحو منتقل می شود و با مجموعه ای از کلیدهای معنی دار کاملاً خاص نشان داده می شود. این به شما امکان می دهد تا عملکردهای جستجوی خود را انجام دهید، که همچنین می تواند به طور معنی دار برچسب گذاری شود.

    در PHP می توان توابعی را که نام آنها در حین اجرای برنامه مشخص می شود فراخوانی کرد. یک مثال بسیار کاربردی از کتابخانه PHPWord که به شما امکان می دهد اسناد MS Word را بخوانید و ایجاد کنید:

    $elements = array("Text"، "Inline"، "TextRun"، "Link"، "PreserveText"، "TextBreak"،
    "ListItem"، "ListItemRun"، "Table"، "Image"، "Object"، "Pootnote"،
    "Endnote"، "CheckBox"، "TextBox"، "Field"، "Line")؛

    $functions = array();

    برای ($i = 0؛ $i< count($elements); $i++) {
    $functions[$i] = "افزودن" . $elements[$i];
    }

    در نتیجه، آرایه توابع $ مقادیر آرایه عناصر $ را دریافت می کند، یعنی نام توابع واقعی که با عناصر واقعی سند کار می کنند.

    با فراخوانی تابع $functions در $elements، می توانید یک جستجوی عالی و یک نتیجه سریع دریافت کنید.

    مرتب سازی عناصر

    وظیفه مرتب سازی داده ها مهم است و PHP چندین تابع را برای این کار ارائه می دهد: sort()، rsort()، asort()، ksort()، ... عناصر صعودی و نزولی، دو تابع دوم رابطه بین کلیدها و ارزش های. گاهی اوقات منطقی است که مقادیر آرایه را به صورت تصادفی به هم بزنیم - shuffle().

    هنگام استفاده از توابع PHP برای مرتب سازی، نباید فراموش کرد که عناصر نه تنها می توانند نوع متفاوتی داشته باشند، بلکه محتوای کاملاً طبیعی نیز ندارند. اول از همه، شما باید در مرتب سازی رشته های حاوی حروف روسی، مرتب سازی تاریخ ها و همچنین اعدادی که در قالب های مختلف نوشته شده اند بسیار مراقب باشید.

    بهترین راه برای نوشتن راه حل کامل خود، حداقل در مرحله آزمایش اسکریپت، مرتب کردن دستی است. به پیش بینی موقعیت های پیش بینی نشده کمک می کند.

    آرایه های رشته ای

    به لطف توابع implode() و explode()، یک آرایه می تواند به راحتی به یک رشته تبدیل شده و بازیابی شود. این به شما امکان می دهد داده ها را در یک نمای فشرده ذخیره کنید و در صورت نیاز آن را به حالت مناسب گسترش دهید.

    آرایه ای که به رشته تبدیل می شود، احتمالات جدیدی را باز می کند. به عنوان مثال، کار جستجوی کلمات کلیدی در متن مستلزم آن است که آنچه پیدا شده است دوباره اضافه نشود.

    $cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Box CheckBox TextBox Footnote";

    $aSrc = explode(" ", $cSrcLine);
    $cDstLine = "";

    برای ($i=0; $i< count($aSrc); $i++) {
    $cFind = "[" . $aSrc[$i]. "]"؛
    if (! is_integer(strpos($cDstLine, $cFind))) (
    $cDstLine .= $cFind;
    }
    }
    $aDst = explode("][", $cDstLine);

    $cOne = implode("; ", $aDst);

    در نتیجه، متغیر $cOne فقط مقادیری را از رشته منبع دریافت می کند که یک بار در آنجا رخ می دهد: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote".

    زبان روسی در کلیدها و مقادیر

    استفاده از هر چیزی که مربوط به رمزگذاری های ملی در ساختارهای نحوی باشد توصیه نمی شود. زبان روسی، مانند همه زبان‌های دیگری که کاراکترهای آن‌ها فراتر از a-z است، در ناحیه داده مشکلی ایجاد نمی‌کند، اما نه در نحو کد. گاهی اوقات حتی یک کار ساده PHP "خروجی یک آرایه به یک چاپگر یا صفحه" منجر به "خرد شدن" می شود، و اغلب به سادگی اسکریپت را متوقف می کند.

    PHP یک زبان وفادار است و نسبت به رمزگذاری‌های ملی مدارا می‌کند، اما موقعیت‌های زیادی وجود دارد که مقدار کار انجام شده باید دوباره انجام شود فقط به این دلیل که یک مقدار کلیدی در مکان و زمان مناسب ظاهر می‌شود که قابل تشخیص نیست.

    نحو PHP و محیط زبان

    باید به خاطر داشت که سینتکس PHP یک چیز است، اما ساختارهای این نحو با سایر برنامه‌ها، با سیستم عامل و گزینه‌های سخت‌افزاری سروکار دارند. گزینه های زیادی وجود دارد، هرگز نمی توان همه چیز را پیش بینی کرد.

    قانون "فقط کد در کد وجود دارد و هر گونه اطلاعاتی در ورودی، داخل و خروجی وجود دارد" به جلوگیری از غافلگیری غیرقابل پیش بینی کمک می کند. مقدار PHP در آرایه می تواند "روسی" باشد، اما کلید آن باید از نظر نحوی نه تنها از دیدگاه زبان داده شده، بلکه از دیدگاه محیط آن نیز صحیح باشد.

    یافتن یک مقدار در یک آرایه تقریباً در هر برنامه PHP مورد نیاز است، اسکریپتی که با داده ها کار می کند، که راه ها و توابع ویژه زیادی برای آن وجود دارد. بسته به وظیفه و نوع جستجو، باید از یک یا ابزار دیگر با در نظر گرفتن ویژگی ها، سرعت اجرا و سهولت استفاده استفاده شود. در ادامه با توابع PHP برای یافتن عناصر در یک آرایه، ساختارها و متدهای ممکن آشنا می شویم و همچنین متوجه می شویم که کدام روش سریع ترین است.

    توابع برای جستجو در یک آرایه:
    آرایه_جستجو- برای جستجوی مقدار در یک آرایه خدمت می کند. در صورت موفقیت، کلید مقدار مورد نظر را برمی گرداند و اگر چیزی پیدا نشد، FALSE را برمی گرداند. قبل از PHP 4.2.0، ()array_search در صورت شکست NULL را برمی‌گرداند نه FALSE.

    نحو برای آرایه_جستجوی ترکیبی (سوزن مختلط، انبار کاه آرایه [، bool strict]).

    foreach(array_expression به عنوان $value)
    بیانیه
    foreach (array_expression به عنوان $key => $value)
    بیانیه

    نمونه ای از استفاده از یک تابع با ساختار foreach برای یافتن یک عنصر آرایه، در صورت موفقیت، TRUE را برمی گرداند

    نحو ساخت و ساز
    در حالی که (expr)
    بیانیه

    کلید یک عنصر آرایه را هنگام موفقیت برمی گرداند

    از جدول اندازه گیری های بالا می توان دریافت که تابع آرایه_جستجو، بهترین نتیجه را هم هنگام جستجو در آرایه های کوچک و بزرگ نشان می دهد. در همان زمان، زمان جستجو با استفاده از حلقه ها بسته به اندازه آرایه به طور قابل توجهی افزایش می یابد.

    (PHP 4 >= 4.0.5، PHP 5)

    array_search - یک آرایه را برای یک مقدار مشخص جستجو می کند و در صورت موفقیت، کلید مربوطه را برمی گرداند

    شرح

    مختلط آرایه_جستجو(سوزن مخلوط، انبار کاه آرایه ای [، bool strict])

    انبار کاه را برای سوزن جستجو می کند و در صورت وجود، کلید را در آرایه برمی گرداند. نادرستدر غیر این صورت.

    اظهار نظر:اگر سوزن یک رشته باشد، یک مقایسه حساس به حروف بزرگ انجام می شود.

    اظهار نظر:قبل از PHP 4.2.0، array_search()با شکست بازگشت خالیبجای نادرست .

    اگر مقداری را پاس کنید درست است، واقعیبه عنوان یک پارامتر سوم اختیاری به تابع، تابع array_search()همچنین نوع سوزن موجود در آرایه انبار کاه را بررسی می کند.

    اگر بیش از یک بار سوزن در انبار کاه وجود داشته باشد، اولین کلید پیدا شده برگردانده خواهد شد. برای برگرداندن کلیدهای تمام مقادیر یافت شده، از تابع استفاده کنید array_keys()با پارامتر اختیاری search_value .


    مثال 1: مثال استفاده array_search()

    $array = array(0 => "آبی" , 1 => "قرمز" , 2 => 0x000000 , 3 => "سبز" , 4 => "قرمز");$key = array_search ("قرمز" , آرایه $)؛ // $key = 1;
    $key = array_search("سبز" , $array ); // $key = 2; (0x000000 == 0 == "سبز")
    $key = array_search ("سبز" , $array , true ); // $key = 3;
    ?>
    توجه

    این تابع می تواند به صورت بولی برگردد نادرست، و یک مقدار غیر بولی که به آن ریخته می شود نادرستبرای مثال 0 یا "". برای اطلاعات بیشتر به نوع Boolean مراجعه کنید. از عملگر === برای تست مقدار برگردانده شده توسط این تابع استفاده کنید.

    از چند بعدی (18)

    من یکی از مثال های زیر توضیحات تابع array_search را اصلاح کردم. تابع searchItemsByKey همه مقادیر را با کلید $ از یک آرایه چند بعدی (N سطوح) برمی گرداند. شاید این برای کسی مفید باشد. مثال:

    $arr = آرایه("XXX"=>آرایه("YYY"=> آرایه("AAA"=> آرایه("keyN" =>"value1")), "ZZZ"=> آرایه("BBB"=> آرایه ("keyN" => "value2")) //.....)); $result = searchItemsByKey($arr,"keyN"); چاپ"

    "; print_r($result); print" 
    "؛ // آرایه OUTPUT ( => value1 => value2)

    کد عملکرد:

    تابع searchItemsByKey($array, $key) ($results = array(); if (is_array($array)) (if (isset($array[$key]) && key($array)==$key) $results = آرایه $[$key]؛ foreach ($array به عنوان $sub_array) $results = array_merge($results, searchItemsByKey($sub_array, $key))؛ ) $results را برگرداند؛)

    من یک آرایه دارم که می خواهم uid را جستجو کنم و کلید را از آرایه بگیرم.

    مثال ها

    فرض کنید آرایه دو بعدی زیر را داریم:

    $userdb = array(array("uid" => "100", "name" => "Sandra Shush", "pic_square" => "urlof100"), array("uid" => "5465", "name" => "Stefanie McMohn"، "pic_square" => "urlof100"), array("uid" => "40489", "name" => "Michael", "pic_square" => "urlof40489"));

    تماس با search_by_uid(100) (uid اولین کاربر) باید 0 برگرداند.

    فراخوانی تابع search_by_uid(40489) باید 2 را برگرداند.

    من سعی کردم حلقه ایجاد کنم، اما به کد اجرایی سریعتر نیاز دارم.

    بر اساس پاسخ عالی Jakub، در اینجا یک جستجوی کلی تر وجود دارد که به شما امکان می دهد کلید را مشخص کنید (نه فقط برای uid):

    تابع searcharray($value، $key، $array) ( foreach ($array به عنوان $k => $val) (اگر ($val[$key] == $value) (return $k; ) ) null برگردانید ;)

    استفاده: $results = searcharray("searchvalue"، searchkey، $array);

    تابع searchForId($id, $array) ( foreach ($array به عنوان $key => $val) ( if ($val["uid"] === $id) ( return $key; ) ) return null; )

    کار خواهد کرد. شما باید آن را اینگونه صدا کنید:

    $id = searchForId("100"، $userdb);

    مهم است بدانید که اگر از === استفاده می کنید، انواع عملگرهایی که مقایسه می شوند باید دقیقاً یکسان باشند، در این مثال باید به دنبال رشته باشید یا فقط از == به جای === استفاده کنید.

    بر اساس پاسخ آنگورو. در نسخه های بعدی PHP (>= 5.5.0) می توانید از یک خط استفاده کنید.

    $key = array_search("100"، array_column($userdb، "uid"));

    با وجود اینکه این یک سوال قدیمی است و یک پاسخ پذیرفته شده وجود دارد، فکر کردم یک تغییر در پاسخ پذیرفته شده پیشنهاد کنم. پس اول از همه قبول دارم که پاسخ پذیرفته شده در اینجا صحیح است.

    تابع searchArrayKeyVal($sKey، $id، $array) ( foreach ($array به عنوان $key => $val) ( if ($val[$sKey] == $id) ( return $key; ) ) return false; )

    در عوض، "uid" از پیش تعیین شده را با یک پارامتر در تابع جایگزین کنید، بنابراین اکنون فراخوانی کد زیر به این معنی است که می توانید از یک تابع برای چندین نوع آرایه استفاده کنید. یک تغییر کوچک، اما کمی متفاوت است.

    // آرایه داده های کاربران $userdb = آرایه (array("uid" => "100","name" => "ساندرا شوش","url" => "urlof100"), array("uid" => " 5465"،"name" => "استفانی مکمون"، "url" => "urlof100")، آرایه ("uid" => "40489"،"name" => "Michael","url" => "urlof40489" "))؛ // کلید آرایه را بدست آورید $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "نتیجه جستجو: "، $userdb[$arrayKey]["name"]؛ ) else (echo "نتیجه جستجو یافت نشد"؛ )

    If(! function_exists("arraySearchMulti"))( تابع arraySearchMulti($search,$key,$array,$returnKey=false) ( foreach ($array به عنوان $k => $val) ( if (isset($val[$ key])) ( if ((string)$val[$key] == (string)$search) ( return ($returnKey ? $k: $val); ) )else( return (is_array($val) ? arraySearchMulti ($search,$key,$val,$returnKey) : null)؛ ) ) null را برگرداند؛ ))

    می توانید از این تابع استفاده کنید. https://github.com/serhatozles/ArrayAdvancedSearch

    ="2""؛ $Array = array("a" => array("d" => "2"), array("a" => "Example World","b" => "2"), array("c" => "3"), array("d" => "4")); $Result = ArraySearch($Array,$query,1); echo "

    "; print_r($Result); echo"
    "؛ // خروجی: // آرایه // (// => آرایه // (// [a] => جهان مثال // [b] => 2 //) // //)

    اگر سوال، یعنی.

    $a = [ [ "_id" => "5a96933414d48831a41901f2", "discount_amount" => 3.29, "discount_id" => "5a92656a14d488570c2c44a2", ], [ "5_a944a2"، ]، [ "5_a944a2" "، "discount_amount" => 4.53، " discount_id" => "5a9265b914d488548513b122"، ], [ "_id" => "5a98083614d488191304b6c3"، "discount_amount" => 15.24، "discount_id" => 15.24، "discount_id""، 4]55883585856. "_id" => "5a982a4914d48824721eafe3", "discount_amount " => 45.74, "discount_id" => "5a928ce414d488609e73b443"، ], [ "_id" => "5a982a4914d48824721eafe55", "discount_amount" => 10.29 "discount_49" => 10.29 "discount_49"> 73b 443"، ]، ];

    تابع searchForId($id، $array) ($did=0; $dia=0; foreach ($array به عنوان $key => $val) (اگر ($val["discount_id"] === $id) ($ dia +=$val["discount_amount"]; $did++; ) ) if($dia != "") (echo $dia; var_dump($did); ) return null; ); print_r(searchForId("5a928ce414d488609e73b443"،$a));

    این را هم امتحان کنید

    تابع search_in_array($srchvalue، $array) ( if (is_array($array) && count($array) > 0) ($foundkey = array_search($srchvalue, $array); if ($foundkey === FALSE) ( foreach ($array به عنوان $key => $value) (if (is_array($value) && count($value) > 0) ($foundkey = search_in_array($srchvalue, $value)؛ if ($foundkey != FALSE ) $foundkey را برگردانید؛ ) ) ) در غیر این صورت $foundkey را برگردانید؛ ))

    $a = ["x" => ["eee"، "ccc"]، "b" => ["zzz"]]; $found = null; $search = "eee"; array_walk($a، تابع ($k، $v) استفاده از ($search، &$found) ( if (in_array($search, $k)) ($found = $v; ) )); var_dump($found);

    در اینجا یک آستر برای همان،

    $pic_square = $userdb["pic_square"];

    در اینجا مثال من است و لطفا توجه داشته باشید که این اولین پاسخ من است. من آرایه param را بیرون آوردم زیرا فقط باید به دنبال یک آرایه خاص بگردم، اما شما به راحتی می توانید آن را اضافه کنید. من می خواستم اساساً به دنبال چیزی بیشتر از uid باشم.

    همچنین، در شرایط من، ممکن است چندین کلید برای بازگشت در نتیجه جستجو با فیلدهای دیگری وجود داشته باشد که ممکن است منحصر به فرد نباشند.

    /** * آرایه @param چند بعدی * مقدار رشته param@ برای جستجو، یعنی نام فیلد خاصی مانند name_first * کلید انجمنی رشته @param برای یافتن آن، یعنی فیلد_name * * کلیدهای آرایه @return. */ تابع search_revisions($dataArray، $search_value، $key_to_search) ( // این تابع نسخه‌ها را برای مقدار معینی // مربوط به کلید انجمنی مورد نظر جستجو می‌کند. $keys = array(); foreach ($dataArray) به عنوان $key => $cur_value) (اگر ($cur_value[$key_to_search] == $search_value) ($keys = $key; ) ) keys $ را برگردانید؛)

    بعداً این را نوشتم تا به من اجازه دهد یک مقدار متفاوت و یک کلید ارتباطی را جستجو کنم. بنابراین، اولین مثال من به شما امکان می دهد یک مقدار را در هر کلید ارتباطی خاص جستجو کنید و همه موارد مطابق را برگردانید.

    این مثال دوم نشان می دهد که در آن مقدار ("Taylor") در یک کلید ارتباطی خاص (first_name) یافت می شود. ومقدار دیگری (true) در یک کلید ارتباطی دیگر (استفاده شده) یافت می‌شود و همه موارد مطابق را برمی‌گرداند (کلیدهایی که در آن افراد با نام "Taylor" AND استفاده می‌شوند.

    /** * @param آرایه چند بعدی * @param string $search_value مقدار مورد جستجو، یعنی یک "Taylor" خاص * @param string $key_to_search کلید ارتباطی برای پیدا کردن آن، یعنی first_name * @param رشته $other_matching_key پیوندی کلید برای یافتن در موارد منطبق برای employed * @param string $other_matching_value مقداری که باید در آن کلید انجمنی منطبق پیدا شود، یعنی true * * @return کلیدهای آرایه، یعنی همه افرادی که نام کوچک "Taylor" دارند. */ تابع search_revisions($dataArray، $search_value، $key_to_search، $other_matching_value = null، $other_matching_key = null) (// این تابع، تجدید نظرها را برای مقدار معینی جستجو می کند // مربوط به کلید انجمنی مورد نظر شما. $ keys = array(); foreach ($dataArray به عنوان $key => $cur_value) (if ($cur_value[$key_to_search] == $search_value) (if (isset($other_matching_key) && isset($other_matching_value) ) (اگر ( $cur_value[$other_matching_key] == $other_matching_value) ($keys = $key; ) ) دیگری (// باید در نظر داشته باشم که برخی از جستجوها ممکن است چندین // منطبق داشته باشند و برخی دیگر ندارند، بنابراین باز بگذارید بدون ادامه

    استفاده از عملکرد

    $data = array(array("cust_group" => 6, "price" => 13.21, "price_qty" => 5), array("cust_group" => 8, "price" => 15.25, "price_qty" => 4)، آرایه ("cust_group" => 8، "price" => 12.75، "price_qty" => 10)); $findKey = search_revisions($data,"8"، "cust_group"، "10"، "price_qty"); print_r($findKey);

    نتیجه

    آرایه (=> 2)

    /** * یک آرایه ساده و چند بعدی را جستجو می کند * @param نوع $needle * @param نوع $haystack * @return boolean */ تابع استاتیک عمومی in_array_multi($needle, $haystack)($needle = trim($needle )؛ if(!is_array($haystack)) return False؛ foreach($haystack به عنوان $key=>$value)( if(is_array($value))( if(self::in_array_multi($needle، $value)) return True; else self::in_array_multi($needle, $value); ) else if(trim($value) === trim($needle))(//رفع دید// error_log("$value === $ تنظیم سوزن دید روی 1 پنهان")؛ بازگشت درست؛ )) بازگشت نادرست؛)

    اگر از (PHP 5 >= 5.5.0) استفاده می کنید، نیازی به نوشتن تابع خود برای این کار ندارید، فقط این خط را بنویسید و کار تمام است.

    اگر فقط یک نتیجه می خواهید:

    $key = array_search(40489, array_column($userdb, "uid"));

    برای نتایج متعدد

    $keys = array_keys(array_column($userdb, "uid"), 40489);

    اگر یک آرایه انجمنی همانطور که در نظرات ذکر شد دارید، می توانید این کار را با:

    $keys = array_keys(array_combine(array_keys($userdb)، array_column($userdb, "uid")),40489);

    اگر از PHP استفاده می کنید<5.5.0, вы можете использовать этот backport , спасибо ramsey!

    به روز رسانی. من در حال انجام چند آزمایش ساده هستم و به نظر می رسد فرم نتیجه چندگانه سریعترین است، حتی سریعتر از عملکرد سفارشی Jakub!

    در نسخه های بعدی PHP (>= 5.5.0) می توانید از این یک خط استفاده کنید:

    $key = array_search("100"، array_column($userdb، "uid"));

    با گسترش تابع ایجاد شده توسط @mayhem، این مثال بیشتر یک جستجوی "فازی" است اگر فقط می خواهید با ( بزرگقسمت) رشته های جستجو:

    تابع searchArrayKeyVal($sKey، $id، $array) ( foreach ($array به عنوان $key => $val) ( if (strpos(strtolower($val[$sKey])، strtolower(trim($id))) ! == false) ( return $key; ) ) return false;)

    به عنوان مثال، مقدار در آرایه است - به نیویورک خوش آمدید! و شما به اولین نسخه فقط "نیویورک!" نیاز دارید.

    من مجبور شدم از تابع un استفاده کنم که تمام عناصر آرایه را پیدا می کند. بنابراین، من عملکرد انجام شده توسط Jakub Trunechk را به صورت زیر تغییر دادم:

    تابع search_in_array_r($needle, $array) ($found = array(); foreach ($array به عنوان $key => $val) ( if ($val == $needle) ( array_push($found, $val); ) ) if (count($found) != 0) $found را برگردانید؛ در غیر این صورت null را برگردانید؛ )

    $search1 = "دمو"; $search2 = "باب"; $arr = array("0" => "سلام","1" => "test","2" => "john","3" => array("0" => "مارتین"، "1" " => "bob"),"4" => "demo"); foreach ($arr به عنوان $value) (if (is_array($value)) (if (in_array($search2, $value)) ( echo "موفقیت آمیز"؛ // اجرای کد شما) ) other ( if ($value == $search1) ( پژواک "موفقیت"؛ ) ) )

    در صورت امکان انواع پارامترها را وارد کنید. اما فقط با انواع ساده مانند int، bool و float کار می کند.

    $unsafe_variable = $_POST["user_id"]; $safe_variable = (int)$unsafe_variable ; mysqli_query($conn, "INSERT INTO جدول (ستون) VALUES ("" . $safe_variable . "")");

    یکی از عملیات های اساسی هنگام کار با آرایه ها، یافتن یک مقدار خاص است. این همان چیزی است که تابع PHP array_search() برای آن است. این می تواند هر دو مجموعه یک بعدی و انجمنی را مدیریت کند و در صورت یافتن در آرایه، کلید مقدار جستجو را برمی گرداند.

    نحو

    توضیح رسمی تابع array_search() در PHP به شرح زیر است:

    array_search مختلط (مقدار مختلط، آرایه $collection [, bool strict])

    پارامترهای ورودی:

    • $collection - آرایه ای که باید جستجو شود.
    • مقدار - مقدار مورد نظر از هر نوع؛
    • strict یک پرچم بولی اختیاری است که یک مکانیسم مقایسه دقیق از نوع آگاه را تنظیم می کند.

    مکانیسم کار

    تابع PHP array_search () مقدار را به نوبه خود با تمام مقادیر موجود در آرایه مجموعه مقایسه می کند. به طور پیش فرض، مقایسه بدون در نظر گرفتن انواع عملوندها انجام می شود. این تنظیم را می توان با تنظیم پرچم سخت روی TRUE تغییر داد. مقایسه رشته ها به حروف کوچک و بزرگ حساس است.

    اگر مطابقت پیدا شود، کلید مربوط به عنصر پیدا شده برگردانده شده و تابع خاتمه می یابد. بنابراین، نمی توان از آن برای تشخیص وقوع چندگانه مقدار مورد نظر در آرایه استفاده کرد.

    اگر مطابقت پیدا نشد، تابع مقدار بولی FALSE را برمی گرداند.

    شما باید نتیجه برگشتی را با استفاده از عملگر برابری دقیق (===) بررسی کنید. این مهم است زیرا تابع ممکن است مقداری را برگرداند که به FALSE ارزیابی می شود، مانند 0 یا یک رشته خالی.

    نمونه هایی از استفاده

    مثال 1. هنگام ارسال یک آرایه چند بعدی به تابع PHP array_search()، نتیجه کار کلید عنصر مورد جستجو خواهد بود.

    "winter", "season2" => "spring", "season3" => "summer", "season4" => "پاییز"); $result1 = array_search("winter", $array); $result2 = array_search("summer", $array); $result3 = array_search("آوریل"، $array); ?>

    در این مثال، $result1 روی "season1"، $result2 روی "season3" و $result3 روی مقدار بولی FALSE تنظیم می شود زیرا رشته "april" در آرایه اصلی وجود ندارد.

    مثال 2. تابع PHP array_search() همچنین می تواند یک آرایه یک بعدی را پردازش کند و کلیدهای آن را به عنوان شاخص های عددی بعدی به ترتیب در نظر بگیرد.

    با توجه به شاخص عنصر "hunter" در آرایه $، متغیر $result روی 1 تنظیم می شود.

    مثال 3. خطای احتمالی در تجزیه و تحلیل نتیجه.

    "واشنگتن"، 1 => "آدامز"، 2 => "جفرسون"، 3 => "مدیسون"، 4 => "مونرو"); $result = array_search("واشنگتن"، $presidents); if (!$result) ( تکرار "جی. واشنگتن اولین رئیس جمهور ایالات متحده نبود"؛ ) ?>

    بنابراین، بدون بررسی نتیجه با برابری دقیق، می توانید یک پیام غیرمنتظره دریافت کنید که جورج واشنگتن اولین رئیس جمهور ایالات متحده نبود.

    مثال 4: فقط کلید اولین بازی یافت شده برگردانده می شود.

    حتی اگر مقدار جستجو شده سه بار در آرایه رخ دهد، تابع فقط اولین نتیجه یافت شده - 0 را برمی گرداند. برای جستجوی چند منطبق، توصیه می شود از تابع PHP array_keys() استفاده کنید.