PDA

View Full Version : گرفتن مقدار یک آرایه (حل شد)



Game.Dev
سه شنبه 05 اسفند 1393, 21:04 عصر
سلام خدمت دوستان عزیز.


ما یک ارایه داریم بدین شکل:


$this->Menu['show'] = TRUE;
$this->Menu['data']['name'] = 'TestMenu';
$this->Menu['data']['number'] = $this->MenuNumber;
$this->Menu['data']['buttons'][] = [ 'text' => __Translate( 'Test1' ), 'link' => '', 'gold' => FALSE, 'id' => '0', 'id_name' => '' ];
$this->Menu['data']['buttons'][] = [ 'text' => __Translate( 'Test2' ), 'link' => '', 'gold' => FALSE, 'id' => '5', 'id_name' => '' ];
$this->Menu['data']['buttons'][] = [ 'text' => __Translate( 'Test3' ), 'link' => '', 'gold' => FALSE, 'id' => '1', 'id_name' => '' ];
$this->Menu['data']['buttons'][] = [ 'text' => __Translate( 'Test4' ), 'link' => '', 'gold' => FALSE, 'id' => '2', 'id_name' => '' ];

حالا ما چجوری بیایم بدون استفاده از foreach با استفاده از یک ارایه در خود php بیایم و مقدار text رو از آرایه ای بگیریم که id تعریفی براش مثلا 5 باشه؟

Game.Dev
سه شنبه 05 اسفند 1393, 22:21 عصر
درودی دیگر. با این تابع مشکل حل شد.

http://php.net/manual/en/function.array-column.php

MMSHFE
سه شنبه 05 اسفند 1393, 23:05 عصر
دقت کنید که این تابع توی نسخه های قبل از 5.5 PHP کار نمیکنه. توی نسخه های قبلی باید با همون foreach کار کنید.

bagherok
سه شنبه 05 اسفند 1393, 23:20 عصر
دقت کنید که این تابع توی نسخه های قبل از 5.5 PHP کار نمیکنه. توی نسخه های قبلی باید با همون foreach کار کنید.
این کتابخانه ساده قابلیت () array column را برای نسخه های پی اچ پی قبل از 5.5 فراهم می کند.



<?php
/**
* This file is part of the array_column library
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @copyright Copyright (c) 2013 Ben Ramsey <http://benramsey.com>
* @license http://opensource.org/licenses/MIT MIT
*/


if (!function_exists('array_column')) {


/**
* Returns the values from a single column of the input array, identified by
* the $columnKey.
*
* Optionally, you may provide an $indexKey to index the values in the returned
* array by the values from the $indexKey column in the input array.
*
* @param array $input A multi-dimensional array (record set) from which to pull
* a column of values.
* @param mixed $columnKey The column of values to return. This value may be the
* integer key of the column you wish to retrieve, or it
* may be the string key name for an associative array.
* @param mixed $indexKey (Optional.) The column to use as the index/keys for
* the returned array. This value may be the integer key
* of the column, or it may be the string key name.
* @return array
*/
function array_column($input = null, $columnKey = null, $indexKey = null)
{
// Using func_get_args() in order to check for proper number of
// parameters and trigger errors exactly as the built-in array_column()
// does in PHP 5.5.
$argc = func_num_args();
$params = func_get_args();


if ($argc < 2) {
trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
return null;
}


if (!is_array($params[0])) {
trigger_error('array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', E_USER_WARNING);
return null;
}


if (!is_int($params[1])
&& !is_float($params[1])
&& !is_string($params[1])
&& $params[1] !== null
&& !(is_object($params[1]) && method_exists($params[1], '__toString'))
) {
trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
return false;
}


if (isset($params[2])
&& !is_int($params[2])
&& !is_float($params[2])
&& !is_string($params[2])
&& !(is_object($params[2]) && method_exists($params[2], '__toString'))
) {
trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
return false;
}


$paramsInput = $params[0];
$paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;


$paramsIndexKey = null;
if (isset($params[2])) {
if (is_float($params[2]) || is_int($params[2])) {
$paramsIndexKey = (int) $params[2];
} else {
$paramsIndexKey = (string) $params[2];
}
}


$resultArray = array();


foreach ($paramsInput as $row) {


$key = $value = null;
$keySet = $valueSet = false;


if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
$keySet = true;
$key = (string) $row[$paramsIndexKey];
}


if ($paramsColumnKey === null) {
$valueSet = true;
$value = $row;
} elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
$valueSet = true;
$value = $row[$paramsColumnKey];
}


if ($valueSet) {
if ($keySet) {
$resultArray[$key] = $value;
} else {
$resultArray[] = $value;
}
}


}


return $resultArray;
}


}


https://github.com/ramsey/array_column/blob/master/src/array_column.php

MMSHFE
سه شنبه 05 اسفند 1393, 23:30 عصر
قرار بود از foreach استفاده نکنن :چشمک:

bagherok
سه شنبه 05 اسفند 1393, 23:35 عصر
شاید منظورشون استفاده غیر مستقیم از foreach بوده.
والا چه فرقی میکنه و اگه دلیل خاصی داره فک میکنم همین کد بالا ها هم بدون foreach قابل پیاده سازی باشه.

MMSHFE
سه شنبه 05 اسفند 1393, 23:37 عصر
احتمالاً تمرین کلاسیه.