मैं अपरिभाषित सूचकांक त्रुटियों फेंकने के बिना नेस्टेड सरणी का उपयोग करने के लिए एक सुरुचिपूर्ण समाधान खोजने के लिए उम्मीद कर रहा था, और इस पोस्ट गूगल पर उच्च हिट। मैं पार्टी के लिए देर हो चुकी हूं, लेकिन मैं भविष्य के आगंतुकों के लिए वजन करना चाहता था।
एक साधारण isset($array['a']['b']['c']
सुरक्षित रूप से नेस्टेड मानों की जांच कर सकता है, लेकिन आपको समय से पहले पहुंचने के लिए तत्वों को जानने की आवश्यकता है। मुझे बहुआयामी सरणी तक पहुंचने के लिए डॉट नोटेशन पसंद है, इसलिए मैंने अपनी एक कक्षा लिखी। यह PHP 5.6 की आवश्यकता है।
यह कक्षा डॉट-नोटेशन में लिखे गए एक स्ट्रिंग पथ को पार करती है और सरणी या सरणी जैसी वस्तु (सुरक्षित ArrayAccess लागू) के नेस्टेड मानों को सुरक्षित रूप से एक्सेस करती है। सेट नहीं होने पर यह मान या NULL वापस कर देगा।
use ArrayAccess;
class SafeArrayGetter implements \JsonSerializable {
/**
* @var array
*/
private $data;
/**
* SafeArrayGetter constructor.
*
* @param array $data
*/
public function __construct(array $data)
{
$this->data = $data;
}
/**
* @param array $target
* @param array ...$indices
*
* @return array|mixed|null
*/
protected function safeGet(array $target, ...$indices)
{
$movingTarget = $target;
foreach ($indices as $index)
{
$isArray = is_array($movingTarget) || $movingTarget instanceof ArrayAccess;
if (! $isArray || ! isset($movingTarget[ $index ])) return NULL;
$movingTarget = $movingTarget[ $index ];
}
return $movingTarget;
}
/**
* @param array ...$keys
*
* @return array|mixed|null
*/
public function getKeys(...$keys)
{
return static::safeGet($this->data, ...$keys);
}
/**
* <p>Access nested array index values by providing a dot notation access string.</p>
* <p>Example: $safeArrayGetter->get('customer.paymentInfo.ccToken') ==
* $array['customer']['paymentInfo']['ccToken']</p>
*
* @param $accessString
*
* @return array|mixed|null
*/
public function get($accessString)
{
$keys = $this->parseDotNotation($accessString);
return $this->getKeys(...$keys);
}
/**
* @param $string
*
* @return array
*/
protected function parseDotNotation($string)
{
return explode('.', strval($string));
}
/**
* @return array
*/
public function toArray()
{
return $this->data;
}
/**
* @param int $options
* @param int $depth
*
* @return string
*/
public function toJson($options = 0, $depth = 512)
{
return json_encode($this, $options, $depth);
}
/**
* @param array $data
*
* @return static
*/
public static function newFromArray(array $data)
{
return new static($data);
}
/**
* @param \stdClass $data
*
* @return static
*/
public static function newFromObject(\stdClass $data)
{
return new static(json_decode(json_encode($data), TRUE));
}
/**
* Specify data which should be serialized to JSON
* @link http://php.net/manual/en/jsonserializable.jsonserialize.php
* @return array data which can be serialized by <b>json_encode</b>,
* which is a value of any type other than a resource.
* @since 5.4.0
*/
function jsonSerialize()
{
return $this->toArray();
}
}
$ value = $ array [$ path] आज़माएं; – Pupil
मैंने कोशिश की लेकिन यह $ array [['a'] ['b'] ['c']] जैसी कुछ व्याख्या करता है। तो यह मेरे लिए काम नहीं करता –
'$ path = ['a'] ['b'] ['c']' मान्य PHP वाक्यविन्यास नहीं है। क्या यह एक स्ट्रिंग है? –