我有像这样的多维数组
Array
(
[jack] => Array
(
[0] => 12
[1] => 45
[2] => 78
[3] => 19
[4] => 94
[5] => 668
)
[john] => Array
(
[0] => 641
[1] => 741
[2] => 683
[3] => 603
)
)
如何搜索 641 ,如果找到则返回其父键。 即。如果找到 641 ,我想获得 john 。
这就是我试过的
if(in_array_r("641" , $array)){
// if found return john!
}
OR
if(in_array_r("12" , $array)){
// if found return jack!
}
我正在寻找一种不会包含foreach loop
的方法。复杂程度较低的解决方案会很好。
答案 0 :(得分:1)
试试这个:
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Model\Session\Quote $sessionQuote,
\Magento\Sales\Model\AdminOrder\Create $orderCreate,
PriceCurrencyInterface $priceCurrency,
\Magento\Wishlist\Model\WishlistFactory $wishlistFactory,
\Magento\GiftMessage\Model\Save $giftMessageSave,
\Magento\Tax\Model\Config $taxConfig,
\Magento\Tax\Helper\Data $taxData,
\Magento\GiftMessage\Helper\Message $messageHelper,
StockRegistryInterface $stockRegistry,
StockStateInterface $stockState,
array $data = []
) {
$this->_messageHelper = $messageHelper;
$this->_wishlistFactory = $wishlistFactory;
$this->_giftMessageSave = $giftMessageSave;
$this->_taxConfig = $taxConfig;
$this->_taxData = $taxData;
$this->stockRegistry = $stockRegistry;
$this->stockState = $stockState;
//Pass All Arguments To Parent
parent::__construct($context, $sessionQuote, $orderCreate, $priceCurrency, $wishlistFactory, $giftMessageSave, $taxConfig, $taxData, $messageHelper, $stockRegistry, $stockState, $data);
}
代码只是在foreach中运行$arr = [
'jack' => [
12,
45,
78,
19,
94,
668,
],
'john' => [
641,
741,
683,
603,
],
];
function in_array_r ($needle, $haystack) {
foreach ($haystack as $key => $subArr) {
if (in_array($needle, $subArr)) {
return $key;
}
}
return false;
}
echo in_array_r(641, $arr); // => john
echo "\n";
echo in_array_r(12, $arr); // => jack
。这将在2D阵列上工作,但不在具有更多尺寸的阵列上工作。如果您的问题实际上不仅仅是2D数组,请告诉我。
答案 1 :(得分:0)
最佳查找方式如下
<?php
$myarr = Array
(
'Jack' => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'url' => 'urlof100'
),
'John' => Array
(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
echo checkData($myarr,100);
function checkData( $myarr,$myvalue )
{
foreach( $myarr as $key => $value ){
if( in_array( $myvalue, $value ) ){
return $key;
}
}
return false;
}
检查http://phptester.net/
答案 2 :(得分:0)
我假设您使用了递归的in_array函数,如下所示: https://gist.github.com/Billy-/bc6865066981e80e097f
我已根据您的要求修改了它(因此它可以根据需要返回数组的键):
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict)!==FALSE)) {
return key($haystack);
}
}
return false;
}
您应该能够将其用作:
echo in_array_r('641',$array); // Prints john
echo in_array_r('12',$array); // Prints jack
我假设的数组是您的问题:
Array
(
[jack] => Array
(
[0] => 12
[1] => 45
[2] => 78
[3] => 19
[4] => 94
[5] => 668
)
[john] => Array
(
[0] => 641
[1] => 741
[2] => 683
[3] => 603
)
)
答案 3 :(得分:0)
$arr = Array(
"jack" => Array(12, 45, 78, 19, 94, 668),
"john" => Array("641", 741, 683, 603),
);
$tofind = 641;
function getKey($arr, $tofind) {
foreach($arr as $key => $val){
if(in_array($tofind, $val)){
return $key;
}
}
return "not found";
}
echo getKey($arr, $tofind);